Ctrl K

Очки за подъём

Средняя
Дан массив heights — высоты точек на маршруте. Каждая внутренняя точка (не первая и не последняя) получает очки: - **2 очка**, если она строго выше *всех* точек до неё и строго ниже *всех* точек после неё; - **1 очко**, если первое условие не выполнено, но точка строго выше соседа слева и строго ниже соседа справа; - **0 очков** в остальных случаях. Верните сумму очков всех внутренних точек. Проверка «всех до и после» в лоб даёт O(n²) — попробуйте за линейное время.
Пример 1
heights=[2, 5, 9, 7, 8] → 2

5 больше всего слева (2) и меньше всего справа (9, 7, 8) — 2 очка. 9 больше соседа слева, но не меньше соседа справа — 0. 7 меньше соседа слева — 0. Итого 2.

Пример 2
heights=[1, 4, 3, 5, 6] → 2

4 больше 1, но справа есть 3 — лишь сравнение с соседями: 4 > 3, значит 0. 3 меньше соседа слева — 0. 5: всё слева (1, 4, 3) меньше, всё справа (6) больше — 2. Итого 2.

Пример 3
heights=[3, 1, 2, 5, 4] → 1

1 и 5 не проходят даже проверку по соседям. 2 больше соседа 1 и меньше соседа 5, но слева есть 3 — это 1 очко. Итого 1.

Ограничения
  • 3 ≤ len(heights) ≤ 10⁵
  • 1 ≤ heights[i] ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДве доски и вода СредняяТройки с нулевой суммой СредняяСумма тройки ближе всего к цели СредняяЧетыре числа с заданной суммой СредняяСледующая расстановка по порядку Средняя
загружаем Python…
Вход
heights=[2, 5, 9, 7, 8]
Ожидается
2

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