【发布时间】:2012-10-23 05:58:43
【问题描述】:
我的任务是创建一个方法,该方法将打印在排序数组中找到值 x 的所有索引。
我知道,如果我们只是从 0 到 N(数组长度)扫描数组,最坏的情况下运行时间为 O(n)。由于将传递给该方法的数组将被排序,我假设我可以利用使用二进制搜索,因为这将是 O(log n)。但是,这仅适用于数组具有唯一值的情况。因为二进制搜索将在第一次“找到”特定值之后完成。我正在考虑进行二进制搜索以在已排序的数组中找到 x,然后检查该索引之前和之后的所有值,但是如果数组包含所有 x 值,它似乎不会好得多。
我想我要问的是,有没有比 O(n) 更好的方法来找到排序数组中特定值的所有索引?
public void PrintIndicesForValue42(int[] sortedArrayOfInts)
{
// search through the sortedArrayOfInts
// print all indices where we find the number 42.
}
例如:sortedArray = { 1, 13, 42, 42, 42, 77, 78 } 将打印:“42 was found at Indices: 2, 3, 4”
【问题讨论】:
-
您的解决方案听起来不错,如果数组包含所有 x 值,无论如何您都必须查看所有这些值
-
@JonSkeet - 对不起那个错字。我已将数组更新为已排序的数组。
标签: java duplicates binary-search