오름차순으로 정렬된 정수 배열 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개를 잘라 반환해요.javascriptCopy codefunction 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);}
이전 문제정렬된 배열의 두 수의 합
다음 문제가장 큰 연속 부분 수열의 합
예시 테스트만 실행 (Cmd/Ctrl+Enter)
숨김 테스트까지 채점 (Cmd/Ctrl+Shift+Enter)
에디터를 불러오고 있어요…
코드를 작성하고Ctrl↵를 눌러 예시 테스트를 확인해 보세요.