一、题目描述
给你一个有序数组nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。
- 不要使用额外的数组空间,你必须在原地修改输入数组 。
- 在使用 O(1) 额外空间的条件下完成。
二、完整代码
1、双指针解题
def removeDuplicates(nums):
left = right = 0
while right < len(nums):
if nums[left] != nums[right]:
left += 1
nums[left],nums[right] = nums[right],nums[right]
right +=1
else:
right +=1
return left+1
虽然有点绕,但是也完美的解决了问题。
2、一快一慢双指针解题
def removeDuplicates(nums):
slow = fast = 1 #慢指针slow指向下一个不同元素要填入的位置
#快指针fast指向遍历数组到达的当前位置
while fast < len(nums): #快指针遍历到末尾元素程序结束
if nums[fast] != nums[fast-1]:
nums[slow] = nums[fast]
slow +=1
fast +=1
return slow
三、总结
上述的两种程序的解题思路是一模一样的,区别在他们的遍历方式和指针的设置上。大家如果有什么问题,欢迎找我讨论交流。欧耶