LeetCode 287 尋找重複數

2021-08-27 04:48:04 字數 749 閱讀 4464

參考:

給定乙個包含 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之間,所以 重複數字肯定在1~n之間。而最終的重複數字不是在原陣列中找的,是根據下標在 1~n這個範圍中找的。eg:陣列[1,3,3,3,4]在 1~3之間有重複數字,且 <=3的個數為4。而4>3,所以重複數在1~3之間,而不再 3~4之間。陣列[1,2,3,4,4,5]在1~3之間沒有重複數字,且<=3的個數為3。而 3 <= 3成立,所以重複陣列在3+1=4~5之間,而不再1~3之間。

public int findduplicate(int nums) 

}if (count <= middle) else

} return start;

}

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

Leetcode 287 尋找重複數

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