코딩테스트

[leetcode] 80. Remove Duplicates from Sorted Array II

nayoon 2024. 8. 3. 17:09

문제

/**

오름차순으로 정렬된 배열이 주어지고 다른 배열을 생성하지 않은 채 배열 내 중복값 일부를 삭제하는 문제인데,
적어도 두 개 이상 존재하는 요소를 삭제하는 문제입니다.

어떤 언어에서는 배열의 크기를 줄이는게 불가능하기 때문에 만약 중복값을 제거한 후 k개의 요소가 있다면 앞쪽 k개의 배열 요소만 체크합니다.
그렇기 때문에 k개 이후부터는 뭐가 있든 상관없음


1, 1, 1, 2, 2, 3
1이 3개이기 때문에 하나를 삭제
2는 2개이므로 그대로
3은 1개이므로 2개보다 작아서 그대로
1, 1, 2, 2, 3

0, 0, 1, 1, 1, 1, 2, 3, 3
0이 2개이므로 그대로
1은 4개이므로 2개 삭제
2는 1개로 2개보다 작아서 그대로
3은 2개이므로 그대로
0, 0, 1, 1, 2, 3, 3 -> 7개


이전값을 고려하되 현재값과 같은 값이 등장하면 몇 개의 같은 값이 등장했는지를 체크하도록 함

 */

class Solution {
    public int removeDuplicates(int[] nums) {
        
        int index = 0;
        int count = 0;

        for(int num: nums) {
            if (index < 1 || num > nums[index - 1]) {
                nums[index] = num;
                index += 1;
                count = 1;
            } else if (num == nums[index - 1]) {
                if (count < 2) {
                    nums[index] = num;
                    index += 1;
                    count += 1;
                } else {
                    count += 1;
                }
            }
        }
        
        return index;
    }
}

 

class Solution {
    public int removeDuplicates(int[] nums) {
        
        int index = 0;
        for(int num: nums) {
            if (index < 2 || num > nums[index - 2]) {
                nums[index] = num;
                index += 1;
            }
        }

        return index;
    }
}