287 尋找重複數

2021-08-27 04:54:09 字數 850 閱讀 3996

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

陣列中只有乙個重複的數字,但它

我的思路:之前做了442442. 陣列中重複的資料,和這個題目很像。

不過這個加了限制,原陣列是唯讀的。它時間複雜度要求小於o(n2) 。

第乙個比較容易想到的方法是二分查詢。

求出中點mid,然後遍歷整個陣列,統計所有小於等於mid的數的個數,如果個數大於mid,則說明重複值在[mid+1, n]之間,反之,重複值應在[1, mid-1]之間,然後依次類推,直到搜尋完成,此時的low就是我們要求的重複值。

然後提交後就看到了大佬們寫的就是不一樣,感覺查閱補習了一下,這個方法二,說實話思維還是要開放點。

快慢指標找環入口

快慢指標的原理可以參考我寫的

題目給出條件陣列值在1~n 所以可以用這個解。

class solution while (speedx1 != speedx2);

speedx1 = 0;

while (speedx1 != speedx2)

return speedx1;

}}

287 尋找重複數

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

287 尋找重複數

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

287 尋找重複數

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