leetcode 287 尋找重複數

2021-09-26 20:54:16 字數 819 閱讀 3295

乙個方法必定是可以用數學證明的,我看題解只能看懂思想,但是為什麼會這樣,我想可能會有人和我一樣有困惑,所以我這裡用數學證明了這個方法的正確性。

光想不如動手證明啊。

我們先定義幾個變數,從a點到b點的距離為m,以b點為入口的環長度為n;

題解中示意:快指標fast 以2為速度移動,而慢指標slow以1為速度移動。

1.當slow第一次到達b點時,distance(slow)=m,distance(fast)=2*m;記此時fast的位置為c,則b順時針方向移動到c點的距離設為x,則x=(2*m-m)%n,我們假設fast經過了k圈,則m=k*n+x=>m-x=k*n。

2.fast和slow繼續移動,直到兩者相遇,我們學過物理,以相對速度可以求得時間,c順時針移動到b點的距離為n-x;fast相對於slow的速度為1,那麼時間即為(n-x)/1=n-x;那麼設此時fast和slow在d處相遇,b順時針移動到d點距離為n-x;

3. 現在我們fast不需要移動,我們讓第三個指標third從a點開始移動,速度和slow一樣為1;

當third移動到b點時,slow也行駛了距離m,所以此時位置為(n-x+m)%n;注意上面深色的表示式m-x=k*n,

帶入即可得到(k*n+n)%n=0;也就是說,此時slow也到達了b點入口點。

證畢!!

LeetCode 287 尋找重複數

參考 給定乙個包含 n 1 個整數的陣列 nums,其數字都在 1 到 n 之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2示例 2 輸入 3,1,3,4,2 輸出 3說明 不能更改原陣列 假設陣列是唯讀的 只...

LeetCode 287(尋找重複數)

給定乙個包含 n 1 個整數的陣列 nums,其數字都在 1 到 n 之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2示例 2 輸入 3,1,3,4,2 輸出 3說明 不能更改原陣列 假設陣列是唯讀的 只能使用...

leetcode287 尋找重複數

1.二分查詢 參考 可以認為有兩個陣列,乙個是原陣列,乙個是1 n的範圍陣列 無重複 每次對low high的範圍陣列做二分,取中間數mid,然後去原陣列中統計小於等於mid的數目,如果大於mid 如果無重複,那麼應該小於等於mid 說明重複的那個數字在1 mid之間,結合範圍即在 low mid之...