class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() <= 1)
return nums.size();
int current = 1; //新数组中有效位置的最后一位,新加入的数据应当写到current+1
for (int i = 2; i < nums.size();i++) //从第三位开始循环,前两位无论如何都是要加入新数组的
{
if(nums[i]!=nums[current]||nums[i]!=nums[current-1]){
current++;
nums[current]=nums[i];
}
}
return current+1;
}
};
(1)明确双指针都代表什么意思,i表示当前遍历的数字下标,current代表已经处理完的下标,也就是说下一个可以放数字的位置是current+1;
(2)是否可以更新逻辑,如果当前遍历的数字nums[i]等于nums[current],那么就要看nums[current-1]是不是也跟nums[i]相等,如果相等,那么需要丢弃当前nums[i],如果不相等,可以更新;如果当前遍历的数字nums[i]不等于nums[current],那么无论nums[current-1]和nums[current]是否相等,都可以更新。
(3)更新操作,current++;nums[current]=nums[i];
(4)返回结果:current是最后一个更新的下标,长度就是current+1。