본문 바로가기

알고리즘풀이

LeetCode: Largest Unique Number

문제설명

  • 정수형 배열 A가 주어졌을 때, 단 하나만 존재하는 정수중 가장 큰 값을 반환하라.
  • 존재하지 않는다면, -1을 반환하라.

1 <= A.length <= 2000
0 <= A[i] <= 1000

문제풀이

  • Set을 이용하여 중복된 값을 검사하여 중복되지 않은 수 중 가장 큰 값을 반환하면 된다.
  • 또는, 문제의 조건에서 A의 크기는 2000까지라는 것을 이용하여 0부터 2000까지의 숫자를 담을 정수 배열을 선언하여 set처럼 사용할 수 있다.
func largestUniqueNumber(_ A: [Int]) -> Int {
    var uniques = Set<Int>()
    var duplicates = Set<Int>()
    // remain unique num
    for num in A {
        if duplicates.contains(num) {
            uniques.remove(num)
        } else {
            duplicates.insert(num)
            uniques.insert(num)
        }
    }

    // find max
    var maxNum = -1
    for uniqueNum in uniques {
        maxNum = max(uniqueNum, maxNum)
    }

    return maxNum
}

func largestUniqueNumber_better(_ A: [Int]) -> Int {
    var seen = Array.init(repeating: 0, count: 2001)

    for num in A {
        seen[num] += 1
    }

    for idx in 0..<seen.count {
        let num = seen.count-1-idx
        if (seen[num] == 1) {
            return num
        }
    }

    return -1
}

print(largestUniqueNumber([5,7,3,9,4,9,8,3,1])) // 8
print(largestUniqueNumber([9,9,8,8])) // -1
print(largestUniqueNumber([9,9,9,8,8])) // -1

print(largestUniqueNumber_better([5,7,3,9,4,9,8,3,1])) // 8
print(largestUniqueNumber_better([9,9,8,8])) // -1
print(largestUniqueNumber_better([9,9,9,8,8])) // -1

https://leetcode.com/explore/featured/card/april-leetcoding-challenge-2021/593/week-1-april-1st-april-7th/3692/

'알고리즘풀이' 카테고리의 다른 글

Graph 탐색, Depth First Search  (0) 2021.05.02
LeetCode: Valid Sudoku  (0) 2021.04.07
LeetCode: MoveZeroes  (0) 2021.04.02
LeetCode: Plus One  (0) 2021.04.01
LeetCode: Intersection of Two Arrays II  (0) 2021.03.31