如何在许多排序的数字数组中找到一个数字?

时间:2018-01-20 16:56:20

标签: javascript arrays algorithm

我有多个不同数字的数组 所有阵列都没有重复的数字。数组可以排序,不会与我的项目发生冲突 如何有效地在这些阵列中找到特定的数字?
是否有可能比在每个阵列上划分和征服更好(它仍然是O(n),因为你必须经历所有阵列并且有很多阵列)。
那么有更好的解决方案吗?

3 个答案:

答案 0 :(得分:2)

当数字是随机的时,在列表(数组)中查找数字总是O(n) 但是,如果对数组进行排序,则可以使用二进制搜索在O(log n)中查找数字 见:https://en.wikipedia.org/wiki/Binary_search_algorithm
如果在所有每个数组中尝试二进制搜索,它仍将给出给定的O(log n),而不是n是所有数组中元素的长度。

Find "10"

1 3 5 8 9 10 14
      p
-> 10 is higher than p(pivot) 8, so remove the left part, and select pivot again

9 10 14
  p
-> 10 is equal to p 10. End search.

答案 1 :(得分:2)

由于值(数字)都是唯一的,您可以创建Map并使用值填充键值对,然后使用Map.get()来检索值。

答案 2 :(得分:1)

假设你有n个排序数组。

要实现在这些数组中查找数字的最佳情况,将花费您o(NlogN)将它们全部合并并创建主排序列表,然后 应用二进制搜索O(logN)。

步骤1:以排序方式组合这些数组以获取主数组。

步骤2:应用二进制搜索以查找元素

实施例: 有两个数组:[1,2,3]和[4,5,6]

步骤:1

let sortedMaster : [1,2,3].concat([4,5,6]).sort(function(a,b){return a - b});

步骤:2

sortedMaster.indexOf(yourNumber)