双指针秒解数组去重难题

双指针法解决删除排序数组中的重复项

问题描述
给定一个升序排列的数组 nums,要求原地删除重复出现的元素,使每个元素只出现一次,并返回新数组的长度。必须在不使用额外数组空间的条件下完成,仅修改输入数组。

核心思路
双指针法(快慢指针)是解决该问题的经典方法。通过维护两个指针(慢指针 slow 和快指针 fast),将非重复元素移动到数组前端。

算法步骤

初始化指针
定义 slowfast 初始值为 01,分别指向数组的第一个和第二个元素。

遍历数组
快指针 fast 遍历数组,比较 nums[fast]nums[slow]

  • nums[fast] != nums[slow],说明遇到新元素,将 slow 右移一位,并将 nums[fast] 的值赋给 nums[slow]
  • 若相等,则跳过(快指针继续右移)。

终止条件
fast 遍历完数组后,slow + 1 即为新数组的长度。

代码实现

def removeDuplicates(nums):
    if not nums:
        return 0
    slow = 0
    for fast in range(1, len(nums)):
        if nums[fast] != nums[slow]:
            slow += 1
            nums[slow] = nums[fast]
    return slow + 1

复杂度分析

  • 时间复杂度:O(n),仅需一次遍历数组。
  • 空间复杂度:O(1),仅使用常量额外空间。

示例演示

输入数组 nums = [1,1,2]

  1. slow=0, fast=1nums[1] == nums[0],跳过。
  2. slow=0, fast=2nums[2] != nums[0]slow 右移,赋值 nums[1] = 2
  3. 最终数组前 slow + 1 = 2 位为 [1,2],返回长度 2

边界情况处理

  • 空数组:直接返回 0
  • 无重复元素:快慢指针同步移动,数组保持不变。
  • 全重复元素:慢指针始终为 0,最终返回长度 1

方法优势

  • 高效性:单次遍历即可完成操作。
  • 原地修改:符合题目空间复杂度要求。
  • 通用性:类似问题(如移除特定值)可套用此模板。

BbS.okapop184.sbs/PoSt/1122_500030.HtM
BbS.okapop185.sbs/PoSt/1122_096053.HtM
BbS.okapop186.sbs/PoSt/1122_392410.HtM
BbS.okapop187.sbs/PoSt/1122_405610.HtM
BbS.okapop188.sbs/PoSt/1122_311307.HtM
BbS.okapop190.sbs/PoSt/1122_338644.HtM
BbS.okapop191.sbs/PoSt/1122_031753.HtM
BbS.okapop192.sbs/PoSt/1122_822024.HtM
BbS.okapop193.sbs/PoSt/1122_578708.HtM
BbS.okapop194.sbs/PoSt/1122_750422.HtM
BbS.okapop184.sbs/PoSt/1122_550773.HtM
BbS.okapop185.sbs/PoSt/1122_509377.HtM
BbS.okapop186.sbs/PoSt/1122_255254.HtM
BbS.okapop187.sbs/PoSt/1122_852708.HtM
BbS.okapop188.sbs/PoSt/1122_620863.HtM
BbS.okapop190.sbs/PoSt/1122_774605.HtM
BbS.okapop191.sbs/PoSt/1122_823804.HtM
BbS.okapop192.sbs/PoSt/1122_637003.HtM
BbS.okapop193.sbs/PoSt/1122_431998.HtM
BbS.okapop194.sbs/PoSt/1122_632137.HtM
BbS.okapop184.sbs/PoSt/1122_900274.HtM
BbS.okapop185.sbs/PoSt/1122_646808.HtM
BbS.okapop186.sbs/PoSt/1122_633212.HtM
BbS.okapop187.sbs/PoSt/1122_548647.HtM
BbS.okapop188.sbs/PoSt/1122_613092.HtM
BbS.okapop190.sbs/PoSt/1122_654622.HtM
BbS.okapop191.sbs/PoSt/1122_736098.HtM
BbS.okapop192.sbs/PoSt/1122_302316.HtM
BbS.okapop193.sbs/PoSt/1122_484391.HtM
BbS.okapop194.sbs/PoSt/1122_055481.HtM
BbS.okapop184.sbs/PoSt/1122_472902.HtM
BbS.okapop185.sbs/PoSt/1122_318043.HtM
BbS.okapop186.sbs/PoSt/1122_977487.HtM
BbS.okapop187.sbs/PoSt/1122_991499.HtM
BbS.okapop188.sbs/PoSt/1122_113634.HtM
BbS.okapop190.sbs/PoSt/1122_367827.HtM
BbS.okapop191.sbs/PoSt/1122_769884.HtM
BbS.okapop192.sbs/PoSt/1122_153858.HtM
BbS.okapop193.sbs/PoSt/1122_883947.HtM
BbS.okapop194.sbs/PoSt/1122_425791.HtM
BbS.okapop184.sbs/PoSt/1122_244228.HtM
BbS.okapop185.sbs/PoSt/1122_417572.HtM
BbS.okapop186.sbs/PoSt/1122_016093.HtM
BbS.okapop187.sbs/PoSt/1122_978550.HtM
BbS.okapop188.sbs/PoSt/1122_929639.HtM
BbS.okapop190.sbs/PoSt/1122_036291.HtM
BbS.okapop191.sbs/PoSt/1122_579147.HtM
BbS.okapop192.sbs/PoSt/1122_030060.HtM
BbS.okapop193.sbs/PoSt/1122_578503.HtM
BbS.okapop194.sbs/PoSt/1122_407263.HtM
BbS.okapop184.sbs/PoSt/1122_758700.HtM
BbS.okapop185.sbs/PoSt/1122_329687.HtM
BbS.okapop186.sbs/PoSt/1122_518579.HtM
BbS.okapop187.sbs/PoSt/1122_414751.HtM
BbS.okapop188.sbs/PoSt/1122_793382.HtM
BbS.okapop190.sbs/PoSt/1122_514551.HtM
BbS.okapop191.sbs/PoSt/1122_856474.HtM
BbS.okapop192.sbs/PoSt/1122_928901.HtM
BbS.okapop193.sbs/PoSt/1122_706358.HtM
BbS.okapop194.sbs/PoSt/1122_808018.HtM
BbS.okapop195.sbs/PoSt/1122_258523.HtM
BbS.okapop196.sbs/PoSt/1122_026385.HtM
BbS.okapop197.sbs/PoSt/1122_889218.HtM
BbS.okapop198.sbs/PoSt/1122_342285.HtM
BbS.okapop199.sbs/PoSt/1122_870636.HtM
BbS.okapop200.sbs/PoSt/1122_878017.HtM
BbS.okapop201.sbs/PoSt/1122_188291.HtM
BbS.okapop261.sbs/PoSt/1122_091796.HtM
BbS.okapop287.sbs/PoSt/1122_111699.HtM
BbS.okapop288.sbs/PoSt/1122_359179.HtM
BbS.okapop195.sbs/PoSt/1122_224771.HtM
BbS.okapop196.sbs/PoSt/1122_808489.HtM
BbS.okapop197.sbs/PoSt/1122_265654.HtM
BbS.okapop198.sbs/PoSt/1122_387760.HtM
BbS.okapop199.sbs/PoSt/1122_892779.HtM
BbS.okapop200.sbs/PoSt/1122_926575.HtM
BbS.okapop201.sbs/PoSt/1122_272654.HtM
BbS.okapop261.sbs/PoSt/1122_883154.HtM
BbS.okapop287.sbs/PoSt/1122_789773.HtM
BbS.okapop288.sbs/PoSt/1122_925213.HtM

#牛客AI配图神器#

全部评论

相关推荐

11-21 22:22
中南大学 Java
本人背景9本,三段大厂实习,后端开发方向。本文将分享秋招至今失败的一切,供读者参考,也是找个渠道抒发心里的郁闷。我的秋招大概在八月底开始,其中八月和九月的约面是非常多的,除了阿里系以外,其他企业大部分给了面试,也大多走到后续的流程了,具体情况如下:腾讯二面挂,字节完成hr面,百度完成三面,滴滴完成三面,美团二面挂,京东一面挂,小红书一面结束(之后过了两个月才挂,不知道何意味),虾皮完成hr面。这段时间的面试总体情况比较顺利,这是符合我的bg的预期的,但是挂的面试已经出现了一些奇怪的端倪,例如:腾讯一面聊了两个小时特别投缘,二面因为我不太会大数据的技术直接挂了美团一面二面都非常顺利,跟面试官聊的也很好,但是没有任何缘由的挂京东一面则是死扣我在京东的实习经历问细节,接近一年前的细节我实在是记不起来,于是挂了但是鉴于当时有好几家大厂已经走完流程,想着怎么样泡池子也能泡出来一个,于是非常悠然自得地等了一段时间现在回头看,其实命运似乎早已在冥冥之中影响着某些事国庆八天假期刚过去,我等来的不是其他人那种假期结束的遗憾和回味,而是字节和百度相继泡池子挂掉的绝望消息,惊诧之余马上感受到的是恐惧,恐惧自己秋招就这样与大厂失之交臂。于是马上火速重新投简历,包括但不限于之前挂过的大厂和一些中厂。令我没有想到的是,腾讯、美团、小红书再也没有任何约面,京东在两个月以后复活以后再次一面挂掉。唯一令我抱有希望却又一次次令我绝望的是字节,因为前面面试表现还不错,重新投递以后马上被约了面试,顺利通过前两轮拷打,第三轮面试遇到难以理喻的主管,全程问ai相关知识,我讲工程他说我不懂底层原理,我讲原理他说你一个搞开发的给我说这些干什么。全程否定,令人汗颜,最后不出意料的挂了。至此已经有些心灰意冷,没想到的是马上又被捞起来约面试,这一次一面问了八十分钟基础知识,很是全面,于是二面发生了完全令我没想到的情况,面试官在让我做了一道我做过的最难的lc题以后,直接开始与我讨论数学问题,是一个排列组合问题,现场推导递推公式。真的,当时那种耻辱、愤怒和无奈交织的心情我永远不会忘记,它是我一辈子的阴影,即使未来某一天拿到offer我都永远记得秋招的残酷和恶心。前面讲了这么多我所经历的事情,想在这里谈谈我的想法和心情。每一个等待的日子,枯燥、焦躁而且没有尽头,像一只鹿在无尽的密林里奔走。直到鹿跑断了腿,人绷断了神经,这煎熬才被动地结束。然而,即便跑出了密林,那守在尽头的也未必是好运。经历了这些事情,其实也让我意识到一些事情,人生不是贪心算法,不能试图在每个阶段追求最好的结果来实现完美的人生。以上是一个失意者的自白,与大家分享一些经历和看法,offer收割机大佬们请轻点嘲讽
不懂你的黑色幽默~:千里马常有而伯乐不常有。不要否定自己,加油!
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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