주어진 조건
문제
Remove Duplicates from Sorted Array 1 에서 배웠던 풀이인 Two Pointers
를 사용해 풀었다.
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
slow, fast = 1, 2
while fast in range(len(nums)):
if nums[slow-1] == nums[fast] and nums[slow] == nums[fast]:
fast += 1
else:
nums[slow+1] = nums[fast]
slow += 1
fast += 1
return slow + 1
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
i = 0
for n in nums:
if i < 2 or n > nums[i-2]:
nums[i] = n
i += 1
return i
앞서 봤던 나의 풀이에서 새로 배운 Two Pointer
를 바로 적용해 풀이해서 제일 좋은 코드라 생각했지만 아니었다.
내 풀이의 문제점
위의 코드 처럼 배열이 정렬되어 있는 상태
라는 것을 이용하면 좀 더 빠른 코드를 구현할 수 있다.
이미 정렬되어 있으므로, nums[i-2] 보다 n이 더 크다면, 아직 중복 허용 2번을 넘지 않았다는 것이다.
ex)
nums = [1, 2, 2, 3, 3, 3, 4]
i = 2
n = 2
일 경우, n > nums[0] ⇒ true
nums[i]에 n 값을 넣고, i를 증가시킨다.