Половина подборки уже позади — отличная работа!
Представьте, что вы смотрите на линию горизонта.
Перед вами — последовательность чисел, обозначающих высоты.
Иногда среди них встречаются «горы» — точки, которые выше своих ближайших соседей.
Напишите функцию find_mountains(heights)
, которая принимает список высот и возвращает кортеж номеров всех гор. Нумерация начинается с 1.
Считаем, что края списка окружены горами бесконечной высоты — поэтому сравниваются только внутренние точки.
Примечание
Ваше решение должно содержать только функции.
Пример
Ввод
result = find_mountains([1, 2, 1, 4, 1])
Вывод
result = (2, 4)
Ввод
result = find_mountains([5, 1, 10, 2, 3, 4, 3, 20])
Вывод
result = (3, 6)
Решение
Представлено два решения: Одно по подсказке Яндекса, второе – интуитивное. И это тот случай, когда интуитивное лучше, потому что проще.
Суть обоих решений одинакова – нам надо сравнивать числа, начиная со второго с соседями. если оно больше соседей, то мы нашли пик.
Посмотреть код
Решение
def find_mountains(heights):
if len(heights) < 3:
return ()
mountain_indices = []
for index, (left, middle, right) in enumerate(zip(heights, heights[1:], heights[2:]), 2):
if middle > left and middle > right:
mountain_indices.append(index)
return tuple(mountain_indices)
Решение
def find_mountains(heights):
if len(heights) < 3:
return ()
mountain_indices = []
for index in range(1, len(heights) - 1):
if heights[index] > heights[index - 1] and heights[index] > heights[index + 1]:
mountain_indices.append(index + 1)
return tuple(mountain_indices)