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