小哆啦与数字王国的去重冒险

123 阅读4分钟

小哆啦开始力扣每日一题的第三天

26. 删除有序数组中的重复项 - 力扣(LeetCode)

小哆啦与数字王国的去重冒险

在一个遥远而神奇的数字王国里,每一个数字都有自己的身份和使命。这个王国的数字们生活得井然有序,每个数字都按照从小到大的顺序排列。但是,这个王国也有一个困扰已久的问题:重复的数字。每当新的数字进入队伍时,总会出现不小心与先前的数字重复,导致队伍变得混乱不堪。

数字们试图通过各种方法来解决这个问题,但无论是从前往后检查,还是通过各种复杂的魔法,他们始终无法找到一个高效的办法。就在数字们一筹莫展的时候,小哆啦从他的家里走了出来。

小哆啦的智慧

小哆啦是一个机智聪明的小伙伴,他常常带着他那神奇的数字法宝,解决各种问题。今天,当他听到数字王国的困扰后,决定要亲自来解救数字们。

他走到数字队伍前,仔细观察着那些有些重复的数字。他发现这些数字虽然乱七八糟地排在一起,但它们竟然是按顺序排列的!这个发现让小哆啦眼睛一亮——他知道,既然数字已经按顺序排列,那么处理重复数字的办法就变得简单了。

“我可以用两个指针的方法来解决这个问题!” 小哆啦自信地说道。

两个指针的奇妙作用

小哆啦召唤出两个神奇的指针,分别命名为 showfast。他把 show 指针设置为队列的第一个位置,fast 指针从第二个数字开始检查。

  • show 指针负责标记当前已找到的唯一数字的末尾位置。
  • fast 指针则用来遍历整个数字队列,逐个检查每个数字,看看它是否已经在 show 指针指向的位置之前出现过。

如果 fast 指针遇到的数字与 show 指针指向的数字不同,那就意味着这个数字是新的、唯一的,于是小哆啦会将它放到 show 指针的下一个位置,并且让 show 指针向后移动一位。

如果 fast 指针遇到的数字与 show 指针所指向的数字相同,那么说明这个数字是重复的,小哆啦会跳过它,让 fast 指针继续向前。

完美的去重算法

小哆啦的数字法宝闪烁着光芒,fast 指针开始沿着数字队列前进,而 show 指针在前方等待着新的数字。

fast 指针遇到新数字时,它将把这个数字放置到 show 指针指向的位置,并将 show 指针推进一位。整个过程非常高效,每次检查只需要常数时间,且 showfast 指针只遍历一次数组。于是,数字们在小哆啦的帮助下,逐渐被去重,队伍变得整洁有序。

小哆啦的代码奇迹

小哆啦知道,数字王国的居民们不仅仅需要解决重复数字的问题,还希望能记录下这个解决方案。于是,他决定将这个高效的去重算法编写成代码,永远传承下去:

function removeDuplicates(nums: number[]): number {
    let show: number = 0, fast: number = 1;  // 定义两个指针
    while (fast < nums.length) {
        if (nums[show] !== nums[fast]) {  // 如果当前数字与前一个不同
            show++;  // 显示指针后移
            nums[show] = nums[fast];  // 将新数字放到显示指针位置
        }
        fast++;  // 快速指针继续向前
    }
    return show + 1;  // 返回去重后的长度
}

数字王国的庆祝

当小哆啦将去重后的结果呈现给数字王国时,所有的数字们都欢呼雀跃。队伍变得整洁,没有重复的数字,每个数字都重新找到了自己的位置,所有的数字都感谢小哆啦的聪明才智。

数字们欢庆着,他们不再为重复的数字困扰,而是朝着更高的目标前进。 “感谢小哆啦,感谢你的智慧和方法!” 数字们齐声喊道。

小哆啦的反思

小哆啦站在数字队伍的前方,看着每一个独特的数字整齐地排成一行。他微笑着思考:“有时候,问题的解决并不一定要非常复杂,只要抓住问题的核心,找到最简单有效的办法,就能事半功倍。”他对自己说。

数字王国的数字们也深刻理解了这个道理——解决问题不在于复杂的手段,而在于用最合适的方法去做。