리스트를 추가로 생성하지 말라는 규칙이 있다.(Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.)
따라서 주어진 리스트만 가지고 풀어야 함.
솔직히 떠오르지 않아서 다른 사람들의 풀이를 보았는데 투포인터로 했다.
s, e = 0, 1로 할당하고
만약 nums[s] == nums[e - 1] 이면 e + 1
다르면 s+1 자리에 e - 1을 넣고 s+1, e+1을 해주었다.
반복 조건은 while을 사용하여 e가 len(nums)보다 커지면 종료되게 했다.
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
l = len(nums)
if l == 0:
return 1
s, e = 0, 1
while e <= l:
if nums[s] == nums[e - 1]:
e += 1
elif nums[s] != nums[e - 1]:
nums[s + 1], nums[e - 1] = nums[e - 1], nums[s + 1]
s += 1
e += 1
return s + 1