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