Ctrl K

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

Средняя
Дан односвязный список head. Узел назовём поворотным, если у него есть и предыдущий, и следующий узел, а его значение строго больше обоих соседей или строго меньше обоих. Первый и последний узлы поворотными не бывают. Расстояние между узлами — разность их позиций в списке. Верните [ближайшее, дальнейшее] — наименьшее и наибольшее расстояние между двумя разными поворотными узлами. Если поворотных узлов меньше двух, верните [-1, -1].
Пример 1
head=list_node([4, 2, 6, 1, 3]) → [1, 2]

Поворотные узлы — 2 (ниже соседей), 6 (выше) и 1 (ниже), на позициях 1, 2, 3. Ближайшие стоят рядом (1), крайние — через 2.

Пример 2
head=list_node([2, 5, 5, 1, 4, 4, 6, 3]) → [3, 3]

Узлы с равным соседом не считаются. Поворотных два: 1 (позиция 3) и 6 (позиция 6), расстояние 3.

Пример 3
head=list_node([1, 2, 3]) → [-1, -1]

Значения только растут, поворотов нет.

Ограничения
  • Число узлов от 2 до 10⁵
  • 1 ≤ значение узла ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСложение чисел-списков СредняяУбрать k-й узел с конца СредняяОбмен соседей парами СредняяХвост списка — в начало СредняяОтсортированный список без повторов Средняя
загружаем Python…
Вход
head=list_node([4, 2, 6, 1, 3])
Ожидается
[1, 2]

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