T287 尋找重複數 如果將陣列抽象成環

2021-10-05 19:18:57 字數 696 閱讀 3558

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 說明 不能更改原陣列 假...