30 lines
1.4 KiB
Python
30 lines
1.4 KiB
Python
# Remove_Duplicates_from_Sorted_Array
|
|
|
|
class Solution:
|
|
def removeDuplicates(self, nums: list[int]) -> int:
|
|
nums[:] = list(dict.fromkeys(nums))
|
|
return len(nums)
|
|
|
|
|
|
## 투포인터를 쓴 공간복잡도 O(1) 풀이법
|
|
|
|
class Solution:
|
|
def removeDuplicates(self, nums: list[int]) -> int:
|
|
unique_pointer = 1
|
|
for i in range(1, len(nums)):
|
|
if nums[i] != nums[i-1]:
|
|
nums[unique_pointer] = nums[i]
|
|
unique_pointer += 1
|
|
return unique_pointer
|
|
|
|
"""
|
|
걸린 시간: 10분
|
|
|
|
시간 복잡도: nums를 dict로 변환하고(key는 요소, value는 none) 다시 리스트로 바꾸기 때문에 O(n)이다.
|
|
|
|
해설: 중복을 없애기 위해 dict와 set을 생각했지만, set은 순서 보장이 되지 않기 때문에 dict으로 변환한 뒤, 다시 리스트로 바꾸는 과정을 생각했다.
|
|
이렇게 하면 따로 메모리를 만들어서 공간복잡도가 O(n)이 되는데, 투 포인터를 활용하면 공간복잡도를 O(1)로 할 수 있다.
|
|
첫 번째 포인터는 중복이 아닌 것들이 나올때 초기화할 위치이고, 두 번째 포인터는 요소 전체를 순회하는 포인터이다.
|
|
시간복잡도는 전체 요소를 보기 때문에 마찬가지로 O(n)이다.
|
|
이 방식은 오름차순이라고 문제에서 제시했기 때문에 중복된 것들을 기억할 필요 없어져서 가능한 풀이이다.
|
|
""" |