K. Поиск гор

Половина подборки уже позади — отличная работа!

Представьте, что вы смотрите на линию горизонта.
Перед вами — последовательность чисел, обозначающих высоты.
Иногда среди них встречаются «горы» — точки, которые выше своих ближайших соседей.

Напишите функцию 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)

Решение

Представлено два решения: Одно по подсказке Яндекса, второе – интуитивное. И это тот случай, когда интуитивное лучше, потому что проще.

Суть обоих решений одинакова – нам надо сравнивать числа, начиная со второго с соседями. если оно больше соседей, то мы нашли пик.

Посмотреть код

Решение

Python
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)

Решение

Python
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)
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии