一.解题思路
思路:这题由于我不太确定那种操作不是原地修改的,所以我直接参考了官方的双指针解法。
解释:i表示慢指针、j表示快指针
1.nums[i] == nums[j] 时j+1跳过重复
2.nums[i] != nums[j] 说明遇到不重复的,需要 i+=1,nums[i] = nums[j],j+=1
3.循环1,2操作
4.最后返回不重复的长度就是i+1
注意:nums后面多余的元素不用处理。例如输入:[1,2,3,3,4] 结果[1,2,3,4,4] return 4
二.代码展示
class Solution:
def removeDuplicates(self, nums):
nums_len = len(nums)
if nums_len == 0:
return 0
# i代表冲第一个元素开始,j代表第二个元素开始
i, j = 0, 1
while j < nums_len:
# 判断不重复则覆盖重复的位置
if nums[j] != nums[i]:
i += 1 # i+1就是重复的位置
# 覆盖重复
nums[i] = nums[j]
j += 1
return i+1
三.总结其他
总结:这个题不难,主要是被题目中的这句话唬到了“你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成”。简单解释就是空间复杂度与处理的是数据量无关。官方的双指针解法中就是不停的在nums中操作,没用使用其他变量来中转或其他操作。
交流:如果有什么建议或者疑问可以在文章下面回复哈,期待交流。