Задача, о которой вы говорите, «первая и последняя позиция отсортированного массива», включает в себя поиск индексов первого и последнего вхождения целевого элемента в отсортированном массиве. Я предоставлю вам несколько способов выполнить эту задачу:
Метод 1: линейный поиск
- Начните с начала массива и пройдитесь по каждому элементу.
- Сравните текущий элемент с целевым элементом.
- Если совпадение найдено, запишите индекс как первое вхождение и продолжайте поиск до конца массива, чтобы найти последнее вхождение.
- Если совпадение не найдено, верните -1 для обоих индексов.
Метод 2: двоичный поиск
- Используйте модифицированный алгоритм двоичного поиска, чтобы найти первое вхождение целевого элемента.
- После обнаружения первого вхождения продолжите двоичный поиск, чтобы найти последнее вхождение.
- Чтобы изменить бинарный поиск, при обнаружении совпадения проверьте, является ли оно первым вхождением, проверив предшествующий ему элемент.
- Аналогично при поиске последнего вхождения проверьте, не следует ли за совпавшим элементом другое вхождение.
Метод 3: подход двух указателей
- Инициализировать два указателя: один в начале массива, другой в конце.
- Перемещайте левый указатель вправо до тех пор, пока не будет найден целевой элемент или пока левый указатель не достигнет конца массива.
- Перемещайте правый указатель влево, пока не будет найден целевой элемент или пока правый указатель не достигнет начала массива.
- Положение левого указателя будет обозначать первое вхождение, а положение правого указателя — последнее вхождение.
Метод 4. Вариант бинарного поиска
- Выполните двоичный поиск, чтобы найти целевой элемент.
- Как только элемент будет найден, расширьте поиск в обе стороны, чтобы найти первое и последнее вхождение.
- Продолжайте развертывание, пока не будут определены первое и последнее вхождение.
Метод 5: стандартные библиотечные функции
- Используйте встроенные функции, доступные в языках программирования, например
std::lower_bound
иstd::upper_bound
в C++ илиbisect_left
иbisect_right
в Python. - Эти функции могут напрямую предоставлять индексы первого и последнего вхождения.