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개만 있도록 배열을 수정하기
초기화
: k를 2로 초기화한다. 이는 배열 nums의 처음 두 요소는 최소 하나의 중복을 허용하기 때문이다.
(어떤 요소라도 최대 두 번까지 나타날 수 있으므로 처음 두 요소는 항상 유효).
반복 처리
: 배열의 세 번째 원소 (인덱스 2)부터 시작하여 배열을 순회한다.
조건 검사
: k-2와 비교하는 이유는 k의 현재 위치에서 이전 두 요소를 확인하여 현재 요소가 그 두 요소와 동일하지 않을 경우만 새 요소로 추가할 목적이다.
즉, nums[i] != nums[k-2]
조건을 통해 현재 요소가 앞의 두 요소와 모두 다를 경우에만 추가한다.
요소 배치
: 위 조건을 만족하는 경우, 즉 현재 요소가 결과 배열의 마지막 두 번째 요소와 다를 경우, nums[k] 위치에 nums[i] 값을 배치한다.
이렇게 하면 배열의 k 위치에 새로운 유효 요소가 저장되며, k (배열의 길이)는 +1 만큼 증가한다.