Входные данные:
Непустая последовательность целых чисел больше нуля, длина которой больше 1.
Выход:
Наибольшее произведение всех элементов самой длинной подпоследовательности между минимальным и максимальным элементами последовательности, включая их самих.
Заметка:
Поскольку минимальный и максимальный элементы могут повторяться, то для определенного ответа необходимо найти самую длинную возможную подпоследовательность, на одном конце которой находится минимум, а на другом конце максимальные элементы последовательности. Если имеется несколько самых длинных подпоследовательностей, выберите подпоследовательность с наибольшим произведением.
Примеры:
1-й пример:
Входные данные: [5, 7, 3, 2, 1, 2, 2, 7, 5]
Выход: 42
Объяснение:
min == 1
, max == 7
. Есть 2 возможных подпоследовательности с мин и макс на концах: [1, 2, 2, 7]
и [7, 3, 2, 1]
. Их длина равна, поэтому сравнивая продукты: 7*3*2*1 == 42
а 1*2*2*7 == 28
. Потому что 42 >= 28
, ответь 42
.
2-й пример:
Входные данные: [1, 2, 2, 2, 4, 3, 3, 1]
Выход: 32
Объяснение:
min == 1
, max == 4
. 2 подпоследовательности: [1, 2, 2, 2, 4]
а [4, 3, 3, 1]
. Длина [1, 2, 2, 2, 4]
больше, чем длина [4, 3, 3, 1]
. продукт: 1*2*2*2*4 == 32
=> ответ 32
.
3d пример:
Входные данные: [1, 2, 3, 4, 3, 3, 1]
Выход: 36
Краткое объяснение:
min == 1
, max == 4
. 2 подпоследовательности: [1, 2, 3, 4]
а [4, 3, 3, 1]
. 1*2*3*4 == 24
, 4*3*3*1 == 36
, 36 >= 24
=> Ответ 36
.
4-й пример:
Входные данные: [2, 2, 2]
Выход: 8
Объяснение:
min == 2
, max == 2
. 2 разных подпоследовательности: [2, 2]
а [2, 2, 2]
. Длина [2, 2, 2]
больше, чем длина [2, 2]
. продукт: 2*2*2 == 8
=> ответ 8
.
Больше (случайных) примеров:
>>>[7, 2, 3, 6, 8, 6, 2, 5, 4, 3]
288
>>>[3, 3, 8, 9, 1, 7, 7, 2, 2, 4]
9
>>>[3, 2, 6, 5, 4, 1, 8, 8, 7, 9]
4032
>>>[7, 4, 2, 8, 8, 3, 9, 9, 5, 6]
31104
Проверьте ваше решение:
Вот Python 3 лямбда (788 байт) , который удовлетворяет требованию задачи:
lambda O: __import__('functools').reduce(__import__('operator').mul,O[[[slice(O.index(max(O)),len(O)-1-O[::-1].index(min(O))+1),slice(O.index(min(O)),(len(O)-1-O[::-1].index(max(O)))+1)][__import__('functools').reduce(__import__('operator').mul,O[O.index(min(O)):(len(O)-1-O[::-1].index(max(O)))+1],1)>=__import__('functools').reduce(__import__('operator').mul,O[O.index(max(O)):len(O)-1-O[::-1].index(min(O))+1],1)],slice(O.index(min(O)),(len(O)-1-O[::-1].index(max(O)))+1),slice(O.index(max(O)),len(O)-1-O[::-1].index(min(O))+1)][(len(range(O.index(min(O)),(len(O)-1-O[::-1].index(max(O)))+1))>len(range(O.index(max(O)),len(O)-1-O[::-1].index(min(O))+1)))-(len(range(O.index(min(O)),(len(O)-1-O[::-1].index(max(O)))+1))<len(range(O.index(max(O)),len(O)-1-O[::-1].index(min(O))+1)))]],1)
Победитель:
Самое короткое решение победит. Все языки программирования принимаются.
PS: буду рад объяснениям ваших решений