Задать вопрос
weranda
@weranda

Как найти соседние элементы массива, сумма которых максимальна (минимальна)?

Приветствую

Первая часть вопроса

Пока не получается осмыслить как правильно решить задачу:
Дан массив. Найдите два соседних элемента, сумма которых максимальна.


Я попытался решить эту задачу. Вроде получилось, но хочется получить понимание того, как именно ее правильно решить, какие варианты будут оптимальные, а самое главное почему. У меня получилось три варианта, но кажется, что имееются варианты решения получше.

# первый вариант
lst0 = [random.randrange(1, 10) for x in range(5)]
print(lst0)
max_lst = 0

for x in range(len(lst0) - 1):
   x = lst0[x] + lst0[x + 1]
   if x > max_lst:
      max_lst = x

print(max_lst, end='\n\n\n')


# второй вариант
lst1 = [random.randrange(1, 10) for x in range(5)]
print(lst1)
lst1 = [lst1[x] + lst1[x + 1] for x in range(len(lst1) - 1)]
print(max(lst1), end='\n\n\n')


# третий вариант
lst2 = [random.randrange(1, 10) for x in range(5)]
print(lst2)
lst2 = [lst2[x] + lst2[x + 1] for x in range(len(lst2) - 1)]
lst2.sort()
print(lst2[-1])


Какой из этих или других вариантов решения задачи выбрать и почему?

Вторая часть вопроса

Во время решения захотелось получить два соседних элемента, сумма которых минимальна и, если на примере второго и третьего вариантов мне понятно как решить задачу по нахождению минимальной суммы двух подряд идущих элементов, то на примере первого варианта нет. По алгоритму первого варианта для нахождения максимальной суммы двух подряд идущих элементов я использую сравнение if x > max_lst, но как поступить в случае с нахождением минимальной суммы, с чем сравнивать мне непонятно.
  • Вопрос задан
  • 4493 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
В задаче написано найти элементы, а не их сумму.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
aRegius
@aRegius
Python Enthusiast
Привет.

num = [.........]
opt = list(map(lambda x, y: (x + y, (x, y)), num, num[1:]))
max_sum_pair = max(opt)    # итоговый кортеж МАКСИМУМ (сумма, (число 1, число 2))
min_sum_pair = min(opt)     # МИНИМУМ
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы