leetcode-287. 寻找重复数-数组构成的链表
-
由题中数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。
-
维护一个映射关系
f(n)= index -> num
,其中数组的下标index,数字为num
当一个数组里有环的时候,例如
[1,3,4,2,2] [3,1,3,4,2]
映射为:
0 -> 1 0 -> 3
1 -> 3 1 -> 1
2 -> 4 2 -> 3
3 -> 2 3 -> 4
4 -> 2 4 -> 2
得链表:
我们得到入环点的数 = 重复的数
这道题就变成了快慢指针找入环点的题,只是快慢指针表示不同
public int findDuplicate(int[] nums) { int slow = 0;//slow指针从0开始 int fast = 0;//fast指针从0开始 slow = nums[slow]; //慢指针一次走一步 fast = nums[nums[fast]]; //快指针一次走两步 while(slow != fast){ //当快慢指针相遇的时候得到结果,如果没相遇则一直循环 //有题目可知这个数组里绝对有一个重复的,所以必定成环 slow = nums[slow]; //慢指针一次走一步 fast = nums[nums[fast]]; //快指针一次走两步 } fast = 0; //让快指针回到开头 while(slow != fast){ //当快慢指针相遇的时候得到结果,没相遇则一直循环 slow = nums[slow]; //慢指针一次走一步 fast = nums[fast]; //快指针一次走两步 } return slow; //最终相遇返回slow就是成环的点 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)