Leetcode第26题
虽然是一道简单的题,但自己还是没有想出来怎么做。
问题核心:原地删除数组中重复的元素(所给数组已排序)
解决方法:时间复杂度和空间复杂度都要求很低
在数组当中设置两个指针i和j,运行的时候,一个指针移动较快,一个移动较慢。
i初始只想nums的第一个元素,j初始指向nums的第二个元素,然后开始遍历。
当nums[j] != nums[i]的时候,将nums[j]复制给nums[i+1],然后继续向后遍历,最终删除i+1到nums的最后一个元素,即为最终想要得到的数组。
一开始没有理解为什么这样做,把nums[j] 复制到nums[i+1],后来变量跟踪了一遍,发现指针 i和j中间都是数组中重复出现的元素,被更改了无关紧要。
代码:
class Solution(object):
def removeDuplicates(self, nums):
“”"
:type nums: List[int]
:rtype: int
“”"
if nums is None:
return None
i = 0
for j in range(1, len(nums)):
if nums[i] != nums[j]:
i = i + 1
nums[i] = nums[j]
del nums[i+1:len(nums)]
return len(nums)