/*
双指针
一个指针出去找不重复的,另一个指针在原地等待外出的指针传来数,最后返回原地指针就可以
判断是否更改的条件就是:看外出指针跟在家指针是不是一样的
如果不相等的话就传过来
不相等的话就接着找
*/
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0) return 0; // 特判一下只存在一个的情况
int k = 1; // 在家指针
for(int i = 1;i<nums.size();i++) // 外出指针
if(nums[i] != nums[i-1]) // 判断条件
nums[k++] = nums[i];
return k;
}
};
② 27. 移除元素
/*
双指针
从头到尾判断一次,一个指针在待删元素,一个指针出去找下一个不待删元素
判断条件:外出指针指的跟val不相等就可以
*/
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int k = 0; // 在家指针
for(int i = 0;i<nums.size();i++) // 外出指针
if(nums[i] != val) // 判断条件
nums[k++] = nums[i];
return k;
}
};
/*
双指针
跟今天的第一题一个思路
因为最少可以存在两个,所以特判size<=2,让在家指针从第二个开始
其他跟第一题思路一样
*/
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() <= 2) return nums.size();
int k = 2;
for(int i = 2;i<nums.size();i++)
if(nums[i] != nums[k-1] || nums[i] != nums[k-2])
nums[k++] = nums[i];
return k;
}
};