这道题拿到手,我以为很简单,想半天,我竟然做不出来,不知道哪一步错了,但感觉思路是没错的,看了一下别人的,找到了问题所在。我的想法是遍历数组,如果前后两个元素相等,删除其中一个,但是最后索引会出现遗漏对象,别人的引入了j来抵消,就多一步,效果大不一样。
```python
def removeDuplicates(self, nums: List[int]) -> int:
j = 0
for i in range(1,len(nums)):
if nums[i-j] == nums[i-j-1]:``
nums.pop(i-j)
j += 1
return len(nums)
但是这样运行速度太慢,用双指针方法去优化
def removeDuplicates(self, nums: List[int]) -> int:
i = 1
j = 0
while i < len(nums):
if nums[j] < nums[i]:
nums[j+1] = nums[i]
j += 1
i += 1
return j+1
一个指针用来遍历,一个用来指向有效数组最后一个位置,当前后值不重复时,才将i的值添加到j的下一位置。时间复杂度O(n),n为数组长度,空间复杂度O(1)