Menu
CoddyTech

Find Minimum in Rotated Sorted Array

Список различных целых чисел был отсортирован по возрастанию, а затем циклически сдвинут: некоторое количество элементов, возможно, ноль, взяли из начала и переместили в конец в том же порядке. Например, после циклического сдвига [2, 5, 9, 11, 13, 15, 17] на 3 позиции получится [11, 13, 15, 17, 2, 5, 9]. Тебе дан циклически сдвинутый список nums. Верни его наименьшее значение за время O(log n).

Функция

findMin(nums: integer-array) → integer
numsinteger-array
повёрнутый отсортированный список различных целых чисел
Возвращаетinteger
наименьшее значение в nums

Ограничения

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i] ≤ 104
  • Все значения в nums различны.
  • nums — это возрастающий список, повернутый на некоторое k, где 0 ≤ k < nums.length; k = 0 оставляет его неповернутым.

Примеры

Ввод
nums = [11, 13, 15, 17, 2, 5, 9]
Вывод
2
Пояснение
Значения возрастают от 11 до 17, а затем падают до 2, где начинается второй участок. При поиске обнаруживается, что 17 > 9 по индексу 3, поэтому минимум находится справа от него; затем 5 ≤ 9 и 2 ≤ 5 сдвигают hi назад, пока в диапазоне не останется только индекс 4, которому соответствует 2.

lock icon+17 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Можешь найти k-е наименьшее значение в nums за время O(log n), не сортируя массив?

Сбросить код
def findMin(nums):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

nums = [11, 13, 15, 17, 2, 5, 9]

Ожидается

2