홈 LeetCode. 26. Remove Duplicates from Sorted Array
글
취소

LeetCode. 26. Remove Duplicates from Sorted Array

image

문제 링크

풀이

입력이 정렬되어 있으므로 같은 값은 서로 인접해 있습니다. 읽기 인덱스로 배열을 왼쪽부터 순회하고, 쓰기 인덱스로 새로운 고유 값이 들어갈 다음 위치를 추적합니다. 현재 값이 마지막으로 쓴 값과 다르면 현재 값을 쓰기 위치에 복사한 다음 쓰기 인덱스를 증가시킵니다.

각 읽기 단계에서 nums[0..write) 접두부에는 이미 처리한 입력에 나온 고유 값만 정렬된 순서로 들어 있습니다. 배열에 값이 하나라도 있으면 첫 값을 기록하며, 그 뒤의 값은 직전 고유 값과 다를 때만 기록합니다. 따라서 빈 배열도 안전하게 처리되어 0을 반환하고, 그 외에는 고유 값의 개수를 반환합니다. 결과로 얻은 고유 값은 입력 배열의 앞부분에 저장되며, 그 뒤의 내용은 무시해도 됩니다.

시간 복잡도는 O(N), 추가 공간 복잡도는 O(1)입니다.

Java

1
2
3
4
5
6
7
8
9
10
11
class Solution {
    public int removeDuplicates(int[] nums) {
        int write = 0;
        for (int read = 0; read < nums.length; read++) {
            if (write == 0 || nums[read] != nums[write - 1]) {
                nums[write++] = nums[read];
            }
        }
        return write;
    }
}
이 글은 저자가 CC BY 4.0 라이선스로 배포합니다.