##双指针
例题:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 :
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
思路:
- 首先数组需要排序,使得重复元素相邻。
- 放置快慢两个指针p和q。
- 比较p和q位置的元素是否相等:
如果相等,则q向后移动1位;
如果不相等,则将q位置上的元素复制到p位置上,p和q军向后移动1位。 - 重复上一步,直到q等于数组长度。
- 最后返回p+1,即为新数组长度。
def removeDuplicates(nums):
p=0
q=1
while q<len(nums):
if nums[p]==nums[q]:
q+=1
else:
nums[p+1]=nums[q]
q+=1
p+=1
return len(nums[0:p+1])