[Leetcode] 80. Remove Duplicates from Sorted Array II
[Leetcode] 80. Remove Duplicates from Sorted Array II

[Leetcode] 80. Remove Duplicates from Sorted Array II

카테고리
📚 Algorithm
작성자
박용성박용성
작성일
2024년 09월 11일
태그
Python
Leetcode
Slug
Leetcode-80
floatFirstTOC: right

🖥️ 시작하며

보자마자 투포인터가 생각나는 문제다. slowfast 를 지정한 후 해결할 수 있다.
 

⚙️ Python

from typing import List class Solution: def removeDuplicates(self, nums: List[int]) -> int: if len(nums) <= 2: return len(nums) # 길이가 2 이하일 경우 이미 조건을 만족 # Two pointer approach slow = 2 # 처음 두 개는 그대로 두므로 slow는 2부터 시작 for fast in range(2, len(nums)): # fast 포인터가 가리키는 값이 slow 포인터 바로 앞 두 개의 값과 다를 때 if nums[fast] != nums[slow - 2]: nums[slow] = nums[fast] # 값을 옮김 slow += 1 # 중복을 허용한 위치를 증가 return slow # slow 포인터가 중복을 제거한 배열의 길이를 반환 # 예제 테스트 sol = Solution() print(sol.removeDuplicates([0, 0, 1, 1, 1, 1, 2, 3, 3]))
 
투포인터를 활용하지 않고 다른 방법으로 해결도 가능하다.
class Solution: def removeDuplicates(self, nums: List[int]) -> int: if not nums: return 0 idx = 1 count = 1 for i in range(1, len(nums)): if nums[i] == nums[i - 1]: count += 1 else: count = 1 if count <= 2: nums[idx] = nums[i] idx += 1 return idx

📌 소감

댓글

guest