LintCode刷題隨筆

2021-10-09 05:00:25 字數 916 閱讀 7113

給出乙個陣列nums包含n + 1個整數,每個整數是從1n(包括邊界),保證至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。

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