最近我被给了一个面试问题,说你有一个有序的数字列表(元素的数量可能相当大,约为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