leetcode287 尋找重複數

2021-09-26 19:51:25 字數 843 閱讀 5893

給定乙個包含 n + 1 個整數的陣列 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。

示例 1:

輸入: [1,3,4,2,2]

輸出: 2

示例 2:

輸入: [3,1,3,4,2]

輸出: 3

說明:不能更改原陣列(假設陣列是唯讀的)。

只能使用額外的 o(1) 的空間。

時間複雜度小於 o(n2) 。

陣列中只有乙個重複的數字,但它可能不止重複出現一次。

題目設定的問題是n+1個元素都在[1,n]這個範圍內。這樣我們可以用那個類似於 『缺失的第乙個正數』 這種解法來做,但是題意限制了我們不能修改原陣列,我們只能另尋他法。也就是本編題解講的方法,將這個題目給的特殊的陣列當作乙個鍊錶來看,陣列的下標就是指向元素的指標,把陣列的元素也看作指標。如0是指標,指向nums[0],而nums[0]也是指標,指向nums[nums[0]].

假設有這樣乙個樣例:[1,2,3,4,5,6,7,8,9,5]。如果我們按照上面的迴圈下去就會得到這樣乙個路徑: 1 2 3 4 5 [6 7 8 9] [6 7 8 9] [6 7 8 9] . . .這樣就有了乙個環,也就是6 7 8 9。point會一直在環中迴圈的前進。

這時我們設定兩個一快(fast)一慢(slow)兩個指標,乙個每次走兩步,乙個每次走一步,這樣讓他們一直走下去,直到他們在重複的序列中相遇,

class solution 

int finder = 0;

while(true)

return slow;

}};

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之...