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; }