leetcode287 尋找重複數 二分法

2021-10-06 12:40:31 字數 825 閱讀 1773

給定乙個包含 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) 。

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

將陣列排序,遍歷陣列,出現相鄰兩個數相等的,說明是重複數

不符合題意!!!改變了原陣列

class

solution

return-1

;}};

二分法:

二分法是基於:陣列中的數範圍是確定的,並且,給定乙個數k,如果小於等於k的數的個數是大於k的,那麼說明重複的數一定在[left,k]中。

對於乙個數k而言,如果[left,k]中沒有重複元素的話,小於等於該元素的個數最多有k個,如果多餘k個說明一定存在重複元素。

class

solution

if(cnt > mid)

else

l = mid +1;

}return l;}}

;

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