1、题目数组
一、审题spa
二、分析指针
一个长度为 n+1 的整形数组,元素值为 1~ n 之间。其中一个元素重复了屡次,其余元素只出现一次。求出屡次出现的那个元素。code
2、解答blog
一、思路索引
相似: 142. Linked List Cycle II 同步
//这道题的关键在于0处是没有索引指向的,将数组视为静态链表,从0处开始的链必定不会指回0处,
//即该链必定有节点被指向两次。而这个节点就是要返回的节点(即重复的值)。
//由于只有一个重复数字,其余链上的状况没必要考虑。
//经过相似跑步的规则,让两个“指针”,异速跑,当二者第一次相遇时,必定在环上。
//此时若通过了n次迭代,环的长度则为n;假设环外的长度为m,此时从相遇点到入环点也差m步;(能够本身画图)
//因此重置一个指针,走相同步数直到相遇,相遇点即为入环点;ast
public int findDuplicate(int[] nums) { if(nums.length > 1) { int slow = nums[0]; int fast = nums[nums[0]]; while(slow != fast) { slow = nums[slow]; fast = nums[nums[fast]]; } fast = 0; while(fast != slow) { fast = nums[fast]; slow = nums[slow]; } return slow; } return -1; }