查找大于给定数字的最小数字(面试)

时间:2013-03-30 22:46:02

标签: algorithm search data-structures complexity-theory

我最近接受了一个面试问题,说你有一个有序的数字列表(元素的数量可以在100000的数量级上相当大),你要找到大于给定数字的最小数字建议的方法在O(log n)时间做这个...我的第一个猜测是使用像数据结构这样的树,面试官说是,但他们有建造这些树的开销,我可以建议另一种方法吗?我明显的答案是使用数组的二进制搜索,但是想知道这是否有效或是否还有其他?

1 个答案:

答案 0 :(得分:0)

取决于您正在使用的列表类型。

如果它不是索引列表,那么没有任何重组就不可能有O(logN)。

所以,如果它是一个索引列表。

您可以按分开搜索。

将目标与[n / 2]

进行比较

如果a [n / 2]小于目标..您的搜索空间会减少。从[n / 2 + 1] ... a [n-1]

开始

以相同的方法进行递归算法,直到找到一对使得a [i]<目标< a [i + 1]

将结束,[i + 1]是你的答案.. !!