LeetCode_26_Remove Duplicates from Sorted Array

本文介绍两种高效去重方法:双指针法与erase函数法。双指针法利用快慢指针,快速跳过重复元素;erase函数法则直接删除重复项,最终返回去重后数组长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:给定一个整型数组,要求去除重复的数据,返回去重后的数组长度
method1:双指针(官方题解)
题目给定一个已经排好序的序列,我们可以设置双指针,一个slow指针,一个fast指针。fast指针用于跳过重复的数据,slow指针用于记录非重复的数据,即fast指针当前所指数据如果跟slow指针所指数据不同时,则slow++,并复制fast指针数据,赋值给slow指针所指数据。如此循环往复,直到fast指针达到最后给定整型数组的大小,循环结束

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        //双指针算法:快指针用于跳过重复数据,慢指针用于指示不重复的数据
        int slow=0,fast=1;
        if(nums.size()<2)//当vector长度小于2时,返回vector长度
            return nums.size();
        while(fast<nums.size()){
            if(nums[fast]==nums[slow])
                fast++;
            else{
                slow++;
                nums[slow]=nums[fast];
            }
        }
        return slow+1;
        
    }
};

在这里插入图片描述将上述代码copy到oj上实际运行时间

method2:使用erase()函数来去除重复的值,使用指针遇到重复数值,则删除掉,最后剩下在vector中的,就是所有不重复的数值,返回vector的size()即可

auto it=nums.begin();//自己使用erase函数来去除重复的元素值
        auto next=it+1;
        for(it;it!=nums.end()&&next!=nums.end();){//erase:在擦除指定元素之后,自动将后面的元素向前移动,填补空位
            if(*it==*next){
                nums.erase(next);
            }
            else{
                it++;
                next++;
            }
        }
        return nums.size();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值