前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[leetcode数组系列]3 删除排序数组中的重复项

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

作者头像
我是程序员小贱
发布2020-06-05 15:19:29
4.2K0
发布2020-06-05 15:19:29
举报
文章被收录于专栏:面试经验贴面试经验贴

前言

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

一 题目

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

1 leetcode原文链接 https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 示例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],然后同时前进下面我们看看图。

代码语言:javascript
复制
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的时候我们才进行复制,如下图所示。

优化后的代码

代码语言:javascript
复制
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 总结

今天学习了快慢指针去掉重复数的问题,在后面还会遇到指针相遇等问题也会有类似的思路哟! 希望读者和咱一起一步一个脚印去把基础知识打牢固。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是程序员小贱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一 题目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档