我遇到的时间是O(log n),时间是O(n log n)。这也是一个非常受欢迎的采访问题。那么当面试官盲目地询问你二元搜索的运行时间是什么时(没有上下文)?你应该怎么说?
答案 0 :(得分:4)
听起来像一个技巧问题,因为没有上下文。看起来像面试官想要在二元搜索是好的时候覆盖案例,而当它不是。
因此,当您对元素列表进行排序并搜索单个元素时,二进制搜索非常有用,在这种情况下,它的成本为O(logn)
。
现在,如果我们没有排序数组,则排序成本为O(n logn)
,然后您可以应用第一个案例。在这种情况下,最好将值放在集合或映射中然后搜索(执行时间O(n)
用于插入,O(1)
用于搜索。)
这两种情况都依赖于单一搜索。二进制搜索不是用于在单次执行中搜索n个元素(或根据n
的任意数量的元素,如n/2
元素,n/4
或甚至logn
元素 - 用于修复号码确定)。对于这种情况,有更好的方法(集合和地图)。
答案 1 :(得分:1)
O(log n),对于平均和最差情况。从未听说有人声称它是O(n log n)。