【发布时间】:2012-07-06 17:35:14
【问题描述】:
我试图解决这个问题:
给定一个 sorted 数组,其中包含从 0 开始的 连续 整数(一个整数可以重复多次)例如 - 0,0,0,1,2,3,3,3,4,4(也可以很长 - 这只是一个example) ,有效地找到给定整数的开始和结束索引。
我正在考虑使用
1)遍历(复杂度 = O(n))
2) 修改后的二分查找(复杂度 =O(log n))。 [ n = 总数组长度]
然后想知道是否可以利用连续整数属性来解决它。 有什么不同的想法或建议吗?
【问题讨论】:
-
只有当序列长度远大于最大数时,二分查找才有用。
-
同意如果序列长度非常小,二分查找就没有多大用处,还有其他想法吗?
-
我会跳成 3 组,因为您可以先看 1 组,然后再看 1 组。这样,如果您是 OOB,您可以停下来,并且会降低您以更快的速度跳... (1/3 的迭代次数。)当然,向前和向后看会花费一些成本,但不如像您那样多次迭代循环。
-
@Fallenreaper:OOB?当然这会减少方法 1 的迭代次数,但它会比二分搜索方法慢...
-
真的,最快的方法是在对数组进行排序时标记这些索引!
标签: arrays algorithm language-agnostic