LeetCode 26. 删除有序数组中的重复项

双指针法

分析:

设置两个指针: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();
}

posted @ 2021-05-11 19:27  KyrieLiu  阅读(96)  评论(0)    收藏  举报