給出乙個陣列nums
包含n + 1
個整數,每個整數是從1
到n
(包括邊界),保證至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。
1.不能修改陣列(假設陣列只能讀)
2.只能用額外的o(1)的空間
3.時間複雜度小於o(n^2)
4.陣列中只有乙個重複的數,但可能重複超過一次
您在真實的面試中是否遇到過這個題? 是
題目糾錯
樣例 1:
輸入:
[5,5,4,3,2,1]
輸出:5
樣例 2:
輸入:
[5,4,4,3,2,1]
輸出:4
思路:限制實在太多了有木有,考慮到空間約束,貌似我們只能乙個數乙個數地試,但是又要求小於o(n^2)的複雜度,甚至都逼得孩子想到了隨機**(霧)。等等,乙個個試?乙個個試實在太慢了,有沒有辦法?自然可以聯想到二分答案的做法,那麼這題可以二分答案嗎,我們試試。
假設我們當前在試x是否是重複的數,由於一共有n+1個數,而每個數都是處於[1,n]的,那麼重複的數必定至少出現了兩次,假設重複的數為y,並且滿足y<=x,那麼處於[x+1,n]的數最多只會出現一次,即》x的數的個數一定滿足<=n-x,而一共有n+1個數,也就是說,設一共有z個數滿足<=x,那麼z>=(n+1)-(n-x)=x+1。
換言之,如果<=x的數的個數》=x+1,則重複的數一定處在[1,x]之中,否則處在[x+1,n]。
class solution
else r=mid;
}return r;
}};
leetcode刷題隨筆
map的優點 1 map是有序的 2 基於紅黑樹實現,查詢的時間複雜度是o n map的缺點 空間佔用率比較高,因為內部實現了紅黑樹,雖然提高了執行效率,但是每個節點都要儲存父親節點和孩子節點和紅黑樹的性質,使得每乙個節點都占用大量的空間。適用的情況 對於要有序的結構,適用map unordered...
lintcode刷題 最小差
原題如下 最小差 給定兩個整數陣列 第乙個是陣列a,第二個是陣列b 在陣列 a 中取 a i 陣列 b 中取 b j a i 和 b j 兩者的差越小越好 a i b j 返回最小差。您在真實的面試中是否遇到過這個題?yes 樣例給定陣列 a 3,4,6,7 b 2,3,8,9 返回0。做題思路 1...
LintCode刷題 有效數字
今天第一次是跟隨乙個博主學習足跡知道有lintcode 和leetcode這兩個刷題 專為學程式設計的同志練手,我希望我可以每天堅持刷一題!題目 有效數字 要求 希望可以得到如下效果 0 true 0.1 true abc false 1 a false 2e10 true 程式 public cl...