Ctrl K

Точки на дне долины

Средняя
Дан массив высот рельефа heights и число span. Индекс i назовём точкой долины, если: - span ≤ i < len(heights) − span; - span значений прямо перед i идут по невозрастанию (каждое следующее не больше предыдущего); - span значений прямо после i идут по неубыванию (каждое следующее не меньше предыдущего). Само значение heights[i] в проверке не участвует. Верните все точки долины в порядке возрастания.
Пример 1
heights=[5, 4, 4, 2, 3, 6, 6, 1], span=2 → [2, 3, 4]

Индекс 2: слева [5, 4] не растёт, справа [2, 3] не убывает. Индекс 3: [4, 4] и [3, 6]. Индекс 4: [4, 2] и [6, 6]. Индекс 5 не подходит: слева [2, 3] растёт.

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

Единственный кандидат — индекс 1, но слева от него [1], справа [3]; оба блока из одного элемента, так что индекс 1 подходит.

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

При span = 2 индекс должен быть не меньше 2 и меньше 2, то есть кандидатов нет.

Ограничения
  • 3 ≤ len(heights) ≤ 10⁵
  • 1 ≤ heights[i] ≤ 10⁶
  • 1 ≤ span ≤ len(heights) / 2
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиРазрез с лучшими средними СредняяРастущий лимит на сундуки СредняяОтрезки с нечётной суммой СредняяЗатишье до и после СредняяПередать нагрузку влево Средняя
загружаем Python…
Вход
heights=[5, 4, 4, 2, 3, 6, 6, 1], span=2
Ожидается
[2, 3, 4]

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