首先我们需要维护一个索引和对应数据一一对应的关系表这道题我们需要注意的是现在不重复的数字共有n个,但是现在我们有n1个数字,那么注定会有两个索引对应了同一条数据,也就是出现了多对一的情况,这样我们使用快慢指针,必定会出行环形,就是出现重复的情况,根据我们之前在环形链表的知识,只需要找到环形的入口即可,快慢指针的相遇点和七点到环入口的距离是相等的,这样只要我们找到环入口,我们就找到了重复数字但是现在给我们的是数组而非链表,不能使用next方法class Solution { public int findDuplicate(int[] nums) { int slow 0; int fast 0; slow nums[slow]; fast nums[nums[fast]]; while(slow ! fast){ slow nums[slow]; fast nums[nums[fast]]; } int pre1 0; int pre2 slow; while(pre1 ! pre2){ pre1 nums[pre1]; pre2 nums[pre2]; } return pre1; } }