说实话,这是一个面试问题。我知道如果数组完全排序,那么我可以使用二进制搜索,即O(logN)。但现在条件是:
我只能想到一个完整的阵列扫描解决方案,即O(N)。但是采访者说有一个O(logN)解决方案。请帮忙。
答案 0 :(得分:2)
要么你没有说完整的问题,要么你的面试官完全错了。以下是适合您描述的示例。
[1, 2, 3, 4, 5, 9, -1, 8, 0, 8, -2, 4, 7, 6]
如您所见,前5个元素已排序。但它并没有帮助你找到6在我的阵列中的位置。你仍然需要O(n)才能找到一个元素。
将您的问题置于极端,如果排序部分由2个元素组成,未排序部分是n-2
元素,该怎么办?他仍然可以在O(log n )
中搜索吗?
只是建议你。一旦你听到了一些你无法相信的事情,就要求一个人向你解释一个想法并想出一个让这个想法变得毫无用处的反例。
答案 1 :(得分:1)
面试官错了。在不知道已排序部分的开始位置及其大小的情况下,您无法在O(logN)中搜索它。