我的任务是创建一个方法,该方法将打印在排序数组中找到值 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”