假设我已对预先计算的浮点数进行了排序:
1, 3, 10, 29
假设我的“输入”是7.3
。我希望我的程序返回3和10,因为它们是我的数组中7.3之前和之后的数字。
最快的方法是什么?我假设您可以在log(n)
时间使用二分查找,但是可以在恒定时间内完成吗?
答案 0 :(得分:3)
我怀疑你能不能在恒定时间内完成它,但你可以在某些假设下使用a van Emde Boas tree在log(log(n))中完成它。在实现简便性方面,二进制搜索可能是最佳选择。
答案 1 :(得分:1)
除非将输入限制为少量预定值,否则不能在恒定时间内执行此操作。只需使用二进制搜索。
二进制搜索的C ++函数是lower_bound
。 (还有其他人,但你想要lower_bound
。)