Вернуть первый локальный минимум в списке
Элемент — локальный минимум, если он строго меньше обоих соседей. Просканируйте список слева направо и верните первое такое значение. Если локального минимума нет, верните None. Кандидатами считайте только внутренние позиции (у первого и последнего элемента лишь один сосед, поэтому они не подходят).
Пример: [1, 2, 1, 2, 3, 4, 5, 6] → 1 (значение по индексу 2).
def first_local_min(x: list[int]) -> int | None:
# ваш код здесь
Напишите реализацию.
Сканируют внутренние индексы 1..len-2 и возвращают x[i] на первом i, где x[i] < x[i-1] and x[i] < x[i+1]; возвращают None, если совпадений нет. Решает обработка границ: при только внутренних кандидатах списки короче 3 не имеют локального минимума.
- ✗Путать глобальный минимум с первым локальным
- ✗Проверять только одного соседа вместо обоих
- ✗Неверно считать первый/последний элемент кандидатом
- →Как бы вы обработали границы, будь они допустимы?
- →Какова временная сложность вашего прохода?
A local minimum is strictly smaller than both neighbours, so only interior positions can qualify. One left-to-right pass returns the first match.
def first_local_min(x: list[int]) -> int | None:
for i in range(1, len(x) - 1):
if x[i] < x[i - 1] and x[i] < x[i + 1]:
return x[i]
return None
For [1, 2, 1, 2, 3, 4, 5, 6] index 2 holds 1, which is below both 2s, so the function returns 1. Lists shorter than three elements have no interior position and return None. The scan is O(n) time, O(1) extra space.