TheCeleryK Ответов: 1

Бинарный поиск с дубликатами в отсортированном массиве


Как я могу использовать алгоритм двоичного поиска для отображения дубликатов отсортированного массива со всеми их индексами? У меня есть работающий алгоритм двоичного поиска, но я не могу отобразить все дубликаты. Может ли кто-нибудь помочь и объяснить, как этого можно достичь?
Спасибо.

Что я уже пробовал:

алгоритм поиска:
static int BinarySearch(int[] arr, int key)
        {
            int minNum = 0;
            int maxNum = arr.Length - 1;

            while (minNum <= maxNum)
            {
                int mid = (minNum + maxNum) / 2;
                if (key == arr[mid])
                {
                    return (++mid);
                }
                else if (key > arr[mid])
                {
                    minNum = mid + 1;
                }
                else
                {
                    maxNum = mid - 1;
                }
            }
            return -1;
        }

1 Ответов

Рейтинг:
11

Patrice T

Цитата:
Как я могу использовать алгоритм двоичного поиска для отображения дубликатов отсортированного массива со всеми их индексами?

Короткий ответ: Нет, это не его цель.
Двоичный поиск дает вам только позицию нужного значения или позицию 1 из них, если они дублируются.
Чтобы отобразить все дубликаты и индексы, вам нужно выполнить вторичный поиск вокруг позиции, возвращаемой процедурой двоичного поиска.
return (++mid);

Кстати, почему вы добавляете 1 к позиции соответствующего элемента ?


Richard MacCutchan

Еще один репост.