题解 | #删除升序数组的重复元素#
删除升序数组的重复元素
https://www.nowcoder.com/practice/fa2ea5ccf0394596b4d7829b17b096ca
//典型的双指针题。由力扣上的*********************************************题变种而来。力扣那题只是要移除特定值的元素,这题的“特定值”则是一直在变化的。
//思路上,每当快指针指向的元素是重复的时候,就让慢指针停止一次步进,让快指针跳过这个元素,使得不会再把这个重复的元素向左移动,反而是用这个重复元素右侧的元素去覆盖它。
//可以将快慢两个指针想象成是在两个数组里的。快指针在旧数组里,慢指针在新数组里。然后将这个过程看作是一个把旧数组中的元素有选择地拷贝到新数组中的过程。
class Solution {
public:
int reArrangeArray(vector<int>& nums) {
// write code here
int slow=1;//相当于新数组的index
int fast=1;//相当于旧数组的index。
int previousVal=nums[0];
int count=0;
if(nums.size()==1)
return 1;
//保证数组中至少有两个元素
while(fast<nums.size())
{
previousVal=nums[slow-1];
if(nums[fast]==previousVal)//如果遇到了重复的值。
{
//什么也不做
count++;
}else if(fast>slow){//如果这时fast已经大于slow了,则需要开始移动元素
nums[slow]=nums[fast];
slow++;
}else {
slow++;
}
fast++;
}
return nums.size()-count;
}
};

