假設有乙個陣列,陣列裡有n+1個數,每個數範圍是1-n,且只有乙個重複數字,找到這個重複數字並返回如:
[1,2,3,2,4]有5個數,每個數範圍為1-4現在的任務是找到2這個數字
普通方法1:可以先排序,遍歷一次,然後對比兩個元素是否相同
#python
nums.sort(
)for num in nums:
if num==num
return num
//c++
#include sort(nums.begin(),nums.end())
for(int i=1;i這個方法很簡單易懂,但是如果要求時間效率再高點呢
普通方法2:用雜湊表(字典或者集合),犧牲記憶體減少排序的時間
#python
result=
for num in nums
if num in result:
return num
result[nums[i]]=
true
//c++
#include mapresult;
for(int i=1;i歸兔賽跑法:定義兩個指標,乙個每次向前兩步,乙個每次向前一步,如果陣列裡有重複的數字,這兩個指標一定會相遇,相遇後,快的指標重置到陣列起點,兩個指標在同時按步數為1的方法前進,再次相遇的數字即為重複數字
#python
tortoise=nums[0]
hare=nums[0]
while
true
: tortoise=nums[tortoise]
hare=nums[nums[hare]
]if tortoise==hare:
break
ptr1=nums[0]
ptr2=tortoise
while
true
: ptr1=nums[ptr1]
ptr2=nums[ptr2]
if ptr1==ptr2:
return ptr1
參考鏈結 龜兔賽跑演算法(Floyd判圈演算法)
參考資料 1.維基百科 判圈演算法 redirect no 2.floyd判圈演算法 floyd cycle detection algorithm 又稱龜兔賽跑演算法 tortoise and hare algorithm 該演算法由美國科學家羅伯特 弗洛伊德發明。可以在有限狀態機 迭代函式或者鍊...
Floyd判圈演算法(龜兔賽跑演算法)
一 演算法簡述 floyd判圈演算法 floyd cycle detection algorithm 又稱龜兔賽跑演算法 tortoise and hare algorithm 是乙個可以在有限狀態機 迭代函式或者鍊錶上判斷是否存在環,以及判斷環的起點與長度的演算法。二 基本思路 在某種關係下,頂點...
C語言 解決龜兔賽跑的問題
pta基礎程式設計題目集7 22 龜兔賽跑這一問題可能有很多解答方法,例如結合數學影象之類的經典方法,除此之外,我還想到了一種方法。下面來看解析。題目簡介 烏龜與兔子進行賽跑,跑場是乙個矩型跑道,跑道邊可以隨地進行休息。烏龜每分鐘可以前進3公尺,兔子每分鐘前進9公尺 兔子嫌烏龜跑得慢,覺得肯定能跑贏...