最近我被給了一個面試問題,說你有一個有序的數字列表(元素的數量可能相當大,約爲100000),你會發現大於給定數字的最小數字表示在O(log n)時間內做到這一點的方法......我的第一個猜測是使用像面試官說的yes的數據結構之類的樹,但是他們在建造這些樹木時有一些開銷我可以建議另一種方法?我明顯的答案是使用數組進行二分搜索,雖然想知道這是否會工作,或者有其他的?查找大於給定數字的最小數字(訪談)
回答
它取決於您正在使用的列表的類型。
如果它沒有索引列表,那麼O(logN)將不可能沒有任何重組。
所以如果它是一個索引列表。
您可以按分割搜索。
比較所述目標與[N/2]
如果A [N/2]小於目標..搜索空間減小。從開始[N/2 + 1] .. A [N-1]
用同樣的方法遞歸算法中,直到找到一對,使得[I] <目標< A [1 + 1]
這將是結束和[i + 1]是你的答案..!
你的方法和排序+ OP提出的二分查找有什麼區別? – angelatlarge
是二進制搜索是我所建議的,但是想知道是否還有其他二進制搜索? – user1950055
二進制搜索查找任何確切的數字。這是二進制搜索的相同方法,但不僅僅是找到確切的數字。 – MissingNumber
- 1. 查找給定BST中小於給定數字(n)的最大數字
- 2. 查找排序列表中大於給定數字的最小數字
- 3. 在Java中查找大於給定數字的最大方塊
- 4. 查找小於特定值的向量中的最大數字
- 5. 查找比數組給定數字的比較大的數字
- 6. 查找最接近給定數字的數組中的數字
- 7. 查找最大和最大的數字
- 8. 查找總和小於給定數組的數組的最大數目
- 9. 如何查找給定行中的最小數字?
- 10. 查找給定範圍之間的最大相似數字
- 11. 找到由給定數字的數字組成的最大可能數字
- 12. Excel在給定列中查找小數點後字符的最大長度
- 13. 查找數字「內」的最大素數
- 14. 如何找到2的最大功率小於給定的數
- 15. notepad ++查找大於特定數字的數字
- 16. 給定n個數字中的最小和最大10個數字
- 17. 最大的數字大於給定的數字,這是一個迴文
- 18. 如何使用awk查找最大和最小的數字?
- 19. 如何查找循環中最小和最大的數字?
- 20. Java - 查找字符串數組的最小值和最大值
- 21. 查找最大/最小的兩個數字
- 22. 最大的素數少於給定的數字java
- 23. 查找字典中與給定數字最接近的值
- 24. 對於大於給定數字的數字的grep行
- 25. 需要找到不大於給定變量的集合中的最大數字
- 26. 查找數字的最小增量
- 27. 最小/最大字符數
- 28. 查找JAVA中的最大數字
- 29. 查找數字的最大輸出
- 30. 查找文件中的最大數字
[二進制搜索](http://en.wikipedia.org/wiki/Binary_search_algorithm) –
是的,他們問你是否知道二分查找。 – zch
我認爲二進制搜索是他們想要聽到的。另一方面,如果不知道這個清單是如何組織的,那麼真的不可能提供正確的建議。它可能是一個鏈表。非常有序,但顯然沒有隨機訪問成員。在這種情況下,不會比O(n)更快。 – mikyra