题解 | #删除升序数组的重复元素#

删除升序数组的重复元素

https://www.nowcoder.com/practice/fa2ea5ccf0394596b4d7829b17b096ca

//典型的双指针题。由力扣上的*********************************************题变种而来。力扣那题只是要移除特定值的元素,这题的“特定值”则是一直在变化的。
//思路上,每当快指针指向的元素是重复的时候,就让慢指针停止一次步进,让快指针跳过这个元素,使得不会再把这个重复的元素向左移动,反而是用这个重复元素右侧的元素去覆盖它。
//可以将快慢两个指针想象成是在两个数组里的。快指针在旧数组里,慢指针在新数组里。然后将这个过程看作是一个把旧数组中的元素有选择地拷贝到新数组中的过程。
class Solution {
public:
    int reArrangeArray(vector<int>& nums) {
        // write code here
        int slow=1;//相当于新数组的index
        int fast=1;//相当于旧数组的index。
        int previousVal=nums[0];
        int count=0;
        if(nums.size()==1)
            return 1;
        //保证数组中至少有两个元素
        while(fast<nums.size())
        {
            previousVal=nums[slow-1];
            if(nums[fast]==previousVal)//如果遇到了重复的值。
            {
                //什么也不做
                count++;
            }else if(fast>slow){//如果这时fast已经大于slow了,则需要开始移动元素
                nums[slow]=nums[fast];
                slow++;
                
            }else {
                slow++;
            }
            fast++;
        }
        return nums.size()-count;
    }
};

全部评论
大佬!必须膜拜一下😆
点赞 回复 分享
发布于 2023-05-27 20:45 湖南
双指针!!!!,我咋没想到
点赞 回复 分享
发布于 2023-05-27 20:39 陕西

相关推荐

02-14 12:40
门头沟学院 Java
程序员花海:1.面试要求必须Java笔试不一定 2.难度对等秋招 远超于日常实习是因为同一批次且转正很多 竞争压力大 3.第一个加点指标,上线了就把接口性能加上去 使用本地缓存这个不算亮点 只是技术选型,要把为什么采用这个和背后的思考写出来而不是单纯堆叠技术没意义 4.八股要一直看 很容易忘记 5.拼团交易这个老问题 堆积技术 另外建议你把奖项合并到教育背景 没必要拆出来放最后
我的简历长这样
点赞 评论 收藏
分享
2025-12-23 16:48
深圳大学 前端工程师
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务