首页 > 编程语言 > 详细

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

时间:2021-05-11 21:51:57      阅读:17      评论:0      收藏:0      [点我收藏+]

技术分享图片

双指针法

分析:

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

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

原文:https://www.cnblogs.com/kyrieliu/p/kyrieliu_leetcode26.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!