문제설명
- 정렬된 배열이 주어졌을 때, 중복을 제거하라
- 주어진 배열을 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]
'알고리즘풀이' 카테고리의 다른 글
LeetCode: Rotate Array (0) | 2021.03.29 |
---|---|
LeetCode: Best Time to Buy and Sell Stock II (0) | 2021.03.28 |
LeetCode: Missing Number (0) | 2021.03.26 |
LeetCode: Valid Parentheses (0) | 2021.03.25 |
LeetCode: Pascal's Triangle, 파스칼 삼각형 (0) | 2021.03.24 |