case1:快慢指標法:將問題抽象為求環的連線點問題!!!
難點在於:怎麼將陣列對映為對應的鍊錶:
這裡採用的是利用陣列中每個元素的index與value構建鍊錶的鏈結關係。
也就是把當前元素的索引(index)對應的值value當作下一步要走到的index(位置)也就是把index和對應value的取值當作乙個各結點,這樣就相當於把陣列中的各個元素當成結點給鏈結起來了。然後陣列中如果有重複元素,則最終肯定fast和slow指標均指向同乙個元素
因為陣列中的元素均在1->n之間所有0號索引在之後的遍歷中根本取不到,也就是0這個元素根本不存在於陣列中。所以將fast,與slow指標的初值設為0,然後按照
:slow = nums[slow]//slow每次走一步
fast = nums[nums[fast]]//fast每次走兩步
先走一輪,這樣fast和slow所表示的值才為陣列中的元素
class solution
//其中乙個指標重新回到起點也就是數字0處
fast = 0;
while(slow!=fast)
//當兩者相遇時,fast,slow所指向的即為重複出現的元素
return slow;
}}
case2:排序再遍歷
case3:借助collection
287 尋找重複數
給定乙個包含 n 1 個整數的陣列 nums,其數字都在 1 到 n 之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2 示例 2 輸入 3,1,3,4,2 輸出 3 說明 不能更改原陣列 假設陣列是唯讀的 只能...
287 尋找重複數
給定乙個包含 n 1 個整數的陣列 nums,其數字都在 1 到 n 之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2示例 2 輸入 3,1,3,4,2 輸出 3說明 不能更改原陣列 假設陣列是唯讀的 只能使用...
287 尋找重複數
287.尋找重複數 給定乙個包含 n 1 個整數的陣列 nums,其數字都在 1 到 n 之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2 示例 2 輸入 3,1,3,4,2 輸出 3 說明 不能更改原陣列 假...