那么可以编写一个返回对象而不是索引的二进制搜索实现吗?我需要这样,所以整个任务在O(logn)
时间内完成,而不是花费更多的时间,然后在我得到索引之后调用collection.get(),这样复杂性就变成了O(nlogn)
。
答案 0 :(得分:2)
二进制搜索需要一个随机访问容器。如果你知道索引,你应该能够到达O(1)中的项目。如果不是这种情况,那么二进制搜索首先是错误的算法。
在这种情况下,您使用的是ArrayList
,它是数组的包装器,它确实提供了有效的随机访问。
答案 1 :(得分:1)
除了 O(1)随机访问集合之外,您不会进行二进制搜索:否则搜索时间将超出 O(log(N))< / em>的。 O(1)集合中不存在所谓的“额外时间”:无论如何,您的替代品必须采取相同的步骤。