8주차 · 투 포인터와 슬라이딩 윈도우
보통투 포인터배열

정렬된 배열 중복 제거

오름차순으로 정렬된 정수 배열 nums가 주어져요. 중복을 제거하고 서로 다른 값만 원래의 오름차순을 유지한 채 담은 배열을 반환해요.

정렬돼 있으니 같은 값은 항상 이웃해 있어요. 읽기 포인터로 배열을 훑고, 앞서 쓴 값과 다를 때만 쓰기 포인터 위치에 채워 넣는 방식으로 O(n)에 처리할 수 있어요.

예시

예시 1
예시 2

제한 사항

  • 0 ≤ nums.length ≤ 100,000
  • nums는 오름차순으로 정렬되어 있어요.
  • -10^9 ≤ nums[i] ≤ 10^9
쓰기 포인터 w를 두고, 각 원소가 바로 앞에 쓴 값(nums[w - 1])과 다를 때만 nums[w]에 쓰고 w를 늘려요. 마지막에 앞에서 w개를 잘라 반환해요.
javascript
function removeDuplicatesSorted(nums) {
let w = 0;
for (let r = 0; r < nums.length; r++) {
if (w === 0 || nums[r] !== nums[w - 1]) {
nums[w] = nums[r];
w++;
}
}
return nums.slice(0, w);
}
에디터를 불러오고 있어요…
코드를 작성하고를 눌러 예시 테스트를 확인해 보세요.