题目来源:力扣(简单难度,数组)删除排序数组中的重复项
非严格递增排列:是指一个序列中的元素从小到大排列,但是可以有相同的元素
解法思路:双指针left和right
移动右指针,右指针的值若与右指针的上一个值相同,即出现了重复,则跳过。
若右指针的值与上一次的值不同,此时将右指针的值赋给左指针,并将左指针移动一个,最后返回左指针指向值及之前的长度的数列即可
代码实现:
n = len(nums)
left = right = 1
while right < n:
if nums[right]!=nums[right-1]:
nums[left] = nums[right]
left+=1
right+=1
return left
n 获得总长度,作为right探路的长度,既循环结束的条件
nums[right]!=nums[right-1],此时出现不重复项
将不重复的值传给left侧,nums[left] = nums[right]
总结
由于题目要求直接在原地更改,返回k值。则我们只需将不重复的值放入前k项内即可。此时用一个指针(left指针)作为已排序好的项数的指向指针,right作为“探路”指针移动,将不重复的项都传送给left指针来进行排序,最后放回left长度的数列即可。