문제설명
- 정수형 배열 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
'알고리즘풀이' 카테고리의 다른 글
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 |