【发布时间】:2016-08-08 12:17:42
【问题描述】:
让我们想象两个这样的数组: [8,2,3,4,9,5,7]
[0,1,1,0,0,1,1]
我怎样才能只对下面有 1 的数字执行二进制搜索,而忽略其余部分? 我知道这可以在 O(log n) 比较中进行,但我当前的方法较慢,因为它必须遍历所有 0 直到达到 1。
【问题讨论】:
-
我不是那个意思。我想对第一个数组进行二进制搜索,但只对在第二个数组的同一索引中具有 1 的数字,忽略其余部分,因此其余部分是否排序无关紧要。
-
二分查找本身是 O(log n),但它需要对输入数组进行排序。排序可以在 O(n * log n) 中完成,过滤第二个数组中与 1 相关的值可以在 O(n) 中完成。因此,整体算法将是 O(n * log n)。使用二分搜索,您再好不过了。
-
我会换一种方式解释:这里是和之前一样的例子:[8,2,3,4,9,5,7] [0,1,1,0,0,1 ,1] 如果我们忽略第一个数组中下面有 0 的数字,第一个数组看起来像这样 [2,3,5,7] 它已排序,所以我们可以进行二分查找。目标是忽略其余数字
标签: algorithm data-structures language-agnostic