[leetcode数组系列]3 删除排序数组中的重复项

前言

秋招的结束,面试了大大小小的公司,最大的问题在于算法上。所以打算坚持在leetcode打卡,看看到底能不能行,如果你想见证,那我来开车,你坐稳,一起走向更好的远方。2020=1024+996,准备好了?

一 题目

[26 删除排序数组中的重复项]

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例1

给定数组 nums = [1,1,2],

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

你不需要考虑数组中超出新长度后面的元素。

示例2

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

2 思路1---快慢指针

这里注意审题,数组本身已经排序,重复的数字就是连续的哟。

我们先定义两个指针,慢指针i和快指针,如果num[i]=num[j],我们就让快指针j跳过重复项。如果num[i]!=num[j],那么久=nums[i++]=num[j],然后同时前进下面我们看看图。

在这里插入图片描述
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size()==0) return 0;
        int i=0;
        for(int j=1;j<nums.size();j++)
        {
            if(nums[j]!=nums[i])
            {
               
                nums[i+1]=nums[j]; 
                i++;
            }
        }
        return i+1;
    }
};

3 思路1优化

如果我们的排序数组没有重复的元素,按照上面的思路我们会出现多余的复制操作,所以借此可以优化一下。当num[i]!=nums[j],而且j-i>1的时候我们才进行复制,如下图所示。


在这里插入图片描述

优化后的代码

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size()==0) return 0;
        int i=0;
        for(int j=1;j<nums.size();j++)
        {
            if(nums[j]!=nums[i])
            {
               if(j-i>1)
               {
                    nums[i+1]=nums[j];
               }
                 
                i++;
            }
        }
        return i+1;
    }
};

4 总结

今天学习了快慢指针去掉重复数的问题,在后面还会遇到指针相遇等问题也会有类似的思路哟!

希望读者和咱一起一步一个脚印去把基础知识打牢固。如果读者发现有什么错误或者不太好的地方,欢迎私我,我会及时修改,同时如果觉得文章不错请点击右下角的在看或者转发分享给身边的小伙伴哟。关注就有免费书籍和视频哟!

image
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 落枕好几天,晚上辗转反侧难以入睡,白天咳嗽打喷嚏脖子肩膀都疼。 今天办公室请了中医大夫来,说可以针灸和刮痧按摩两种...
    丽丽_8228阅读 876评论 0 0
  • 三伏天气,闲看卫星地图,鼠标就奇怪地移到了西贡,然后放大,然后就看见一些河流、街道、酒店,就有了整理一下这段游记的...
    左民山人阅读 1,445评论 0 0
  • 因为脚伤的原因今天一天没出门,孩下午的歌唱比赛也没办法参加,放学后爸爸接去奶奶家,诺诺说想在奶奶家写完作业再回家,...
    拾一片光阴阅读 1,612评论 0 1
  • 我不用大学生来自我介绍,但是确确实实是一名不合格的大学生。作为这个社会的新生儿,作为所有家长眼里什么都不能做,什么...
    玉佳阅读 1,040评论 0 0
  • 作家冯唐写过一篇文章《如何避免成为一个油腻的中年猥琐男》,有油腻的中年男相应的就有油腻的中年妇女,网上有很多对油腻...
    b37c28fb876b阅读 2,540评论 0 0

友情链接更多精彩内容