80. Remove Duplicates from Sorted Array II

JinJinJara·2024년 4월 24일
0

알고리즘 문제 풀이

목록 보기
27/27

예시

Input: nums = [1,1,1,2,2,3]
Output: 5, nums = [1,1,2,2,3,_]
Explanation: Your function should return k = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).

Example 2:
Input: nums = [0,0,1,1,1,1,2,3,3]
Output: 7, nums = [0,0,1,1,2,3,3,,]
Explanation: Your function should return k = 7, with the first seven elements of nums being 0, 0, 1, 1, 2, 3 and 3 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).


풀이

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if len(nums) < 3:
            return len(nums)
        k = 2
        for i in range(2, len(nums)):
            if nums[i] != nums[k - 2]:
                nums[k] = nums[i]
                k += 1
        return k

목적 : 새로운 배열 추가 없이 중복값이 최대 2개만 있도록 배열을 수정하기

  1. 초기화
    : k를 2로 초기화한다. 이는 배열 nums의 처음 두 요소는 최소 하나의 중복을 허용하기 때문이다.
    (어떤 요소라도 최대 두 번까지 나타날 수 있으므로 처음 두 요소는 항상 유효).

  2. 반복 처리
    : 배열의 세 번째 원소 (인덱스 2)부터 시작하여 배열을 순회한다.

  3. 조건 검사
    : k-2와 비교하는 이유는 k의 현재 위치에서 이전 두 요소를 확인하여 현재 요소가 그 두 요소와 동일하지 않을 경우만 새 요소로 추가할 목적이다.
    즉, nums[i] != nums[k-2] 조건을 통해 현재 요소가 앞의 두 요소와 모두 다를 경우에만 추가한다.

  4. 요소 배치
    : 위 조건을 만족하는 경우, 즉 현재 요소가 결과 배열의 마지막 두 번째 요소와 다를 경우, nums[k] 위치에 nums[i] 값을 배치한다.
    이렇게 하면 배열의 k 위치에 새로운 유효 요소가 저장되며, k (배열의 길이)는 +1 만큼 증가한다.

0개의 댓글