小哆啦开始力扣每日一题的第三天
小哆啦与数字王国的去重冒险
在一个遥远而神奇的数字王国里,每一个数字都有自己的身份和使命。这个王国的数字们生活得井然有序,每个数字都按照从小到大的顺序排列。但是,这个王国也有一个困扰已久的问题:重复的数字。每当新的数字进入队伍时,总会出现不小心与先前的数字重复,导致队伍变得混乱不堪。
数字们试图通过各种方法来解决这个问题,但无论是从前往后检查,还是通过各种复杂的魔法,他们始终无法找到一个高效的办法。就在数字们一筹莫展的时候,小哆啦从他的家里走了出来。
小哆啦的智慧
小哆啦是一个机智聪明的小伙伴,他常常带着他那神奇的数字法宝,解决各种问题。今天,当他听到数字王国的困扰后,决定要亲自来解救数字们。
他走到数字队伍前,仔细观察着那些有些重复的数字。他发现这些数字虽然乱七八糟地排在一起,但它们竟然是按顺序排列的!这个发现让小哆啦眼睛一亮——他知道,既然数字已经按顺序排列,那么处理重复数字的办法就变得简单了。
“我可以用两个指针的方法来解决这个问题!” 小哆啦自信地说道。
两个指针的奇妙作用
小哆啦召唤出两个神奇的指针,分别命名为 show 和 fast。他把 show 指针设置为队列的第一个位置,fast 指针从第二个数字开始检查。
show指针负责标记当前已找到的唯一数字的末尾位置。fast指针则用来遍历整个数字队列,逐个检查每个数字,看看它是否已经在show指针指向的位置之前出现过。
如果 fast 指针遇到的数字与 show 指针指向的数字不同,那就意味着这个数字是新的、唯一的,于是小哆啦会将它放到 show 指针的下一个位置,并且让 show 指针向后移动一位。
如果 fast 指针遇到的数字与 show 指针所指向的数字相同,那么说明这个数字是重复的,小哆啦会跳过它,让 fast 指针继续向前。
完美的去重算法
小哆啦的数字法宝闪烁着光芒,fast 指针开始沿着数字队列前进,而 show 指针在前方等待着新的数字。
当 fast 指针遇到新数字时,它将把这个数字放置到 show 指针指向的位置,并将 show 指针推进一位。整个过程非常高效,每次检查只需要常数时间,且 show 和 fast 指针只遍历一次数组。于是,数字们在小哆啦的帮助下,逐渐被去重,队伍变得整洁有序。
小哆啦的代码奇迹
小哆啦知道,数字王国的居民们不仅仅需要解决重复数字的问题,还希望能记录下这个解决方案。于是,他决定将这个高效的去重算法编写成代码,永远传承下去:
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; // 返回去重后的长度
}
数字王国的庆祝
当小哆啦将去重后的结果呈现给数字王国时,所有的数字们都欢呼雀跃。队伍变得整洁,没有重复的数字,每个数字都重新找到了自己的位置,所有的数字都感谢小哆啦的聪明才智。
数字们欢庆着,他们不再为重复的数字困扰,而是朝着更高的目标前进。 “感谢小哆啦,感谢你的智慧和方法!” 数字们齐声喊道。
小哆啦的反思
小哆啦站在数字队伍的前方,看着每一个独特的数字整齐地排成一行。他微笑着思考:“有时候,问题的解决并不一定要非常复杂,只要抓住问题的核心,找到最简单有效的办法,就能事半功倍。”他对自己说。
数字王国的数字们也深刻理解了这个道理——解决问题不在于复杂的手段,而在于用最合适的方法去做。