문제설명
- 정렬된 배열이 주어졌을 때, 중복을 제거하라
- 주어진 배열을 in-place로 수정해야 한다.
- 반환하는 값은 중복이 제거된 배열까지의 길이다.
문제풀이
- Two pointers 전략을 사용하여, 차례로 배열을 순회할 인덱스 교체할 인덱스 두 개를 둔다.
- 교체할 인덱스와 순회하는 인덱스가 가리키는 값이 다를 때, 교체할 인덱스에 하나를 더한 인덱스 위치에 현재 인덱스의 값을 복사한다.
func removeDuplicates(_ nums: inout [Int]) -> Int {
var replacedIdx = 0
for i in 0..<nums.count {
if nums[i] != nums[replacedIdx] {
replacedIdx += 1
nums[replacedIdx] = nums[i]
}
}
return replacedIdx+1
}
var input1 = [0,0,1,1,1,2,2,3,3,4]
print(removeDuplicates(&input1)) // 5
print(input1) // 0,1,2,3,4...
var input2: [Int] = []
print(removeDuplicates(&input2)) // 0
var input3: [Int] = [1,1,2]
print(removeDuplicates(&input3)) // 2
print(input3) // [1,2,2]