双指针法
分析:
设置两个指针:p1,p2,初始p1指向数组的第一个元素,p2指向第二个元素
1)如果p1的值 == p2的值,就让p2后移一位
2)如果p1的值 != p2的值,修改p1的下一个元素的值为p2指向元素的值,然后将二者同时后移
p1始终指向要覆盖的元素的前一位,p2遍历整个数组将不重复的元素赋值到p1的下一个位置
当p2遍历完整个数组后,将p1后的元素从数组中删去
代码
//it1为上述p1,it2为上述p2
//解法与leetcode-cpp中代码1思想一样,我的有点麻烦,不需要用迭代器,用两个索引就可以实现双指针
int removeDuplicates(vector<int>& nums){
if(nums.size()==0) return 0;
vector<int>::iterator it1=nums.begin();
vector<int>::iterator it2 = it1+1;
while(it2!=nums.end()){
if(*it1 == * it2)
it2++;
else{
vector<int>::iterator mid = it1+1;
*mid = *it2;
it1++;
it2++;
}
}
nums.erase(it1+1,it2);
for(it1=nums.begin();it1!=nums.end();it1++){
cout<<*it1<<" ";
}
cout<<endl;
return nums.size();
}
原文:https://www.cnblogs.com/kyrieliu/p/kyrieliu_leetcode26.html