Поиск минимума в отсортированном повернутом массиве

Дан массив длины n, который изначально был отсортирован по возрастанию. Затем он был повернут от 1 до n раз. Например, массив nums = [1,2,3,4,5,6] мог стать:

[3,4,5,6,1,2], если его повернули 4 раза [1,2,3,4,5,6], если его повернули 6 раз

Обратите внимание, что поворот массива 4 раза перемещает последние четыре элемента массива в начало. Поворот массива 6 раз возвращает исходный массив.

Предполагая, что все элементы в повернутом отсортированном массиве nums уникальны, верните минимальный элемент этого массива.

Решение, работающее за время O(n), тривиально. Можете ли вы написать алгоритм, который работает за время O(log n)?

Пример 1:

Input: nums = [3, 4, 5, 1, 2]
Output: 1
Объяснение: Исходный массив был [1,2,3,4,5] и был повернут 3 раза.

Пример 2:

Input: nums = [4, 5, 6, 7, 0, 1, 2]
Output: 0
Объяснение: Исходный массив был [0,1,2,4,5,6,7] и был повернут 4 раза.

Рекомендуемая временная и пространственная сложность

Вам следует стремиться к решению с временной сложностью O(log n) и пространственной сложностью O(1), где n — размер входного массива.


Подсказка 1

Линейный поиск (O(n)) прост, но можно ли использовать тот факт, что массив был изначально отсортирован? Подумайте о бинарном поиске.


Подсказка 2

Массив разделен на две отсортированные части. Минимальный элемент находится на границе этих частей. Как можно найти эту границу?


Подсказка 3

При бинарном поиске сравнивайте средний элемент с правым концом. Это поможет определить, в какой части находится минимум.

Эта задача проверяет понимание бинарного поиска и его применения к модифицированным отсортированным массивам. Она помогает развивать навыки работы с массивами и логическое мышление при работе с измененными структурами данных. Решение задачи способствует улучшению понимания алгоритмической сложности и оптимизации.

Входные параметры :

[3, 4, 5, 1, 2]

Ожидаемый результат

1