Мне было поручено создать метод, который будет печатать все индексы, где значение 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.
}
Ex: sortedArray = {1, 13, 42, 42, 42, 77, 78} будет печатать: "42 было найдено по индексам: 2, 3, 4"