Ctrl K

Минимум в сдвинутом списке

Средняя
Был список из n различных целых чисел, отсортированный по возрастанию. Его циклически сдвинули вправо от 1 до n раз: при одном сдвиге последний элемент переезжает в начало. Например, [2, 5, 8, 11] после двух сдвигов превращается в [8, 11, 2, 5], а после четырёх снова становится [2, 5, 8, 11]. Дан получившийся список ring. Верните наименьший элемент в нём. Уложитесь в O(log n) по времени.
Пример 1
ring=[40, 55, 70, 3, 18] → 3

Исходный список был [3, 18, 40, 55, 70]; его сдвинули на 3 позиции вправо, и наименьшее значение 3 оказалось на позиции 3.

Пример 2
ring=[-6, -2, 8, 13] → -6

Список сдвинули ровно на свою длину, и он вернулся в исходный вид — минимум стоит первым.

Пример 3
ring=[21, -9] → -9

Исходный список [-9, 21] сдвинули на одну позицию: 21 переехал в начало. Минимум — -9.

Ограничения
  • 1 ≤ n = ring.length ≤ 5000
  • -5000 ≤ ring[i] ≤ 5000
  • Все числа в ring различны
  • ring — отсортированный по возрастанию список, циклически сдвинутый от 1 до n раз
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПоиск в сдвинутом отсортированном массиве СредняяПервая и последняя копия СредняяПоиск в таблице-цепочке СредняяПоиск в сдвинутом массиве с повторами СредняяЕдинственная вершина Средняя
загружаем Python…
Вход
ring=[40, 55, 70, 3, 18]
Ожидается
3

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 90 тестов на сервере, включая скрытые.