2020/10/16删除排序数组中都重复项

leetCode题目-删除排序数组中都重复项

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 1:

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

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

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

来源:力扣(LeetCode)

代码样式

class Solution {
    public int removeDuplicates(int[] nums) {

    }
}

我的代码,难得这么强,太激动了!

执行用时:1ms 超过了98.21%
内存消耗:40.1mb 超过了98.72%

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length==0)return 0;
        int cur=nums[0];
        int index=1;
        for(int i=1;i<nums.length;i++){
           if(nums[i]>cur){
               nums[index]=nums[i];
               index++;
               cur=nums[i];
           }
        }
         return index;
     }
}

思路

  • 首先对题目的分析,返回的是一个整型但输出的是数组。事实上就是需要你在nums的基础上对他进行改造,将重复项去掉,并把改造后的数据从数组下标为0开始的地方依次放入,最后的输出就是根据你返回的整型值来遍历nums数组的前多少项。因此也不用在意数组中,超出你给定长度的元素。

代码分析

  • 首先对nums数字是否为空进行判断
  • 其次给一个cur和index,cur表示需要比较的下标的数组的值,index表示需要被替换掉的元素的下标。
  • 因为nums本身是排好序的,所以nums[0]一定是最小的元素。因此
    cur=nums[0],之后插入的元素也只需要从下标1开始,得出index=1
  • 再从下标为1开始遍历数组,只要出现比cur大的值,就将值赋给下标为index的数组,同时index++指向下一个需要改变数组值的位置,之后cur变成当前需要比较的值cur=nums[i]
  • 最后返回index,虽然index表示的是下标,而题目需要的是数组的有效长度,但可以发现index一直都是指向当前元素cur的后面一个位置,所以index=数组的有效长度。

官方题解:双指针算法

算法

数组完成排序后,我们可以放置两个指针 iii 和 jjj,其中 iii 是慢指针,而 jjj 是快指针。只要 nums[i]=nums[j]nums[i] = nums[j]nums[i]=nums[j],我们就增加 jjj 以跳过重复项。

当我们遇到 nums[j]≠nums[i]nums[j] \neq nums[i]nums[j]​=nums[i] 时,跳过重复项的运行已经结束,因此我们必须把它(nums[j]nums[j]nums[j])的值复制到 nums[i+1]nums[i + 1]nums[i+1]。然后递增 iii,接着我们将再次重复相同的过程,直到 jjj 到达数组的末尾为止。

代码

public int removeDuplicates(int[] nums) {
   if (nums.length == 0) return 0;
   int i = 0;
   for (int j = 1; j < nums.length; j++) {
       if (nums[j] != nums[i]) {
           i++;
           nums[i] = nums[j];
       }
   }
   return i + 1;
}

思路

和我的想法类似,我是把一个指针直接换成值,官方的效率更高

最后再说一下将图片保存到markdown中

  • 需要用到base64图片转码工具
    base64图片转码工具
  • 最后在md文件中的的格式,因为转码后会有巨多字符,所以需要使用标签
  • 标签格式![avatar][dog]
  • 文末格式[dog]:data:image/png....;

2020-10-16今天仅花2小时就完成了算法和算法的总结,太棒了,开心,把昨天新鞋开胶的烦恼都冲走,下午可以开始继续springboot的学习了。同时还发现了我的大爱鞋款 匡威OneStarPro和new balance880,主要是在我的经济承受能力范围之内选择的,要不然太多了,双十一尽量把两双都买回来,匡威是可以的,但880最近溢价太严重了,还可能没有灰色配色,不好说,无情!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358