LeetCode Top Interview 150) Remove Duplicates from Sorted

EBAB!·2023년 8월 23일
0

LeetCode

목록 보기
2/35

Question

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:

  • Change the array nums such that the first k elements of nums contain the unique elements in the order they were present in nums initially. The remaining elements of nums are not important as well as the size of nums.
  • Return k.

Constraints:

  • 1 <= nums.length <= 3 * 10^4
  • -100 <= nums[i] <= 100
  • nums is sorted in non-decreasing order.
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을 반환합니다.

이 문제 역시 쉬운 문제여서 크게 고민할 부분은 없었던 문제입니다.

profile
공부!

0개의 댓글