leetcode287 尋找重複數

2021-09-21 17:40:23 字數 731 閱讀 9395

1.二分查詢

參考:**)

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

int

findduplicate

(vector<

int>

& nums)

if(count>mid) high=mid;

else low=mid+1;

}return low;

}

2.快慢指標

參考:

int

findduplicate

(vector<

int>

& nums)

fast =0;

//快指標回到起點,慢指標在相遇點,兩個一起走一步

while

(fast != slow)

return slow;

}return-1

;}

解釋參考:

假設重複的數字是x,對應的兩個下標分別為a和b,a和b也在陣列裡,當到a時,下一步會到x,經過一段時間後遍歷到b時還會到x,一次迴圈。即環的起點就是那個重複的元素

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說明 不能更改原陣列 假設陣列是唯讀的 只能使用...

Leetcode 287 尋找重複數

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