Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same. Then return the number of unique elements in nums.
Consider the number of unique elements of nums to be k, to get accepted, you need to do the following things:
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
한 리스트nums
를 받아서 중복되는 원소를 제거하는 문제입니다. in-place
로 해결해야 하고 중복된 원소가 삭제된 문자열의 길이를 반환합니다.
제가 생각한 코드는 다음과 같습니다.
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
idx = 0
for n in nums[1:]:
if nums[idx] != n:
idx += 1
nums[idx] = n
return idx+1
이 문제도 in-place
이기 때문에 메모리를 어느 정도 활용하는 pythonic한 코드를 짜는 것엔 무리가 있었습니다.
idx
: nums
의 원소를 저장할 인덱스.nums
의 두번째 원소를 시점으로 순회하면서 nums[idx]
와 비교합니다.idx
에 저장한 뒤 idx
값을 올려줍니다.idx
는 최종적으로 마지막으로 저장된 인덱스 값을 가집니다. 리스트의 길이를 반환해야 하므로 idx+1
을 반환합니다.이 문제 역시 쉬운 문제여서 크게 고민할 부분은 없었던 문제입니다.