给定一个数组部分是排序部分不是,如何找到一个特定的元素?

时间:2016-06-24 01:16:26

标签: arrays algorithm sorting

说实话,这是一个面试问题。我知道如果数组完全排序,那么我可以使用二进制搜索,即O(logN)。但现在条件是:

  1. 某些部分已分类,而其他部分则未分类。
  2. 我们不知道哪个部分是排序的,也不知道这个部分有多长。
  3. 我只能想到一个完整的阵列扫描解决方案,即O(N)。但是采访者说有一个O(logN)解决方案。请帮忙。

2 个答案:

答案 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)中搜索它。