자바 알고리즘

[leetcode - Java] 80. Remove Duplicates from Sorted Array II

Big Iron 2023. 8. 24. 18:01

1. 문제


  • 배열 nums에서 중복되는 각 요소는 최대 2개이며, 2개 초과되는 요소를 삭제한 최종 배열 nums의 길이를 구하여라

image

2. 시도


nums 배열의 중복된 값을 검사하고 2개 까지만 새 객체에 넣어줬다.

class Solution {
    public int removeDuplicates(int[] nums) {
        ArrayList<Integer> arr = new ArrayList<>();
        int index = 0;

        for (int n : nums) {
            if (arr.contains(n) && index%2 == 0) {
                continue;
            }
            arr.add(n);
            index++;
            System.out.println("index = " + index);
            System.out.println("arr = " + arr);
        }

        for (int i=0; i<arr.size(); i++) {
            nums[i] = arr.get(i);
        }

        return arr.size();
    }
}

일부 테스트 케이스는 통과했지만 최종 제출에서 실패인 경우도 있었다.

image

image

이전에도 비슷한 문제를 풀면서 새로운 객체를 생성하지 않고 입력받은 배열만을 사용해 문제를 해결할 수 있을 것 같았다. 찾아보던 중 투 포인터 개념을 접하게 되었고, 배열 내부에서 두 개의 인덱스를 사용해 서로를 비교할 수 있었다.

3. 개선


class Solution {
    public int removeDuplicates(int[] nums) {

        int index = 2;

        for (int i=2; i<nums.length; i++) {
            if (nums[i] != nums[index-2]) {
                System.out.println("nums[i] = " + nums[i]);
                System.out.println("nums[index-2] = " + nums[index-2]);
                nums[index] = nums[i];
                index++;
            }
        }
        System.out.println("index = " + index);
        System.out.println("result = " + Arrays.toString(nums));
        return index;
    }
}

image