Entrada:
Uma sequência não vazia de números inteiros maior que zero, cujo comprimento é maior que 1.
Saída:
O maior produto de todos os elementos da subsequência mais longa entre os elementos mínimo e máximo da sequência, incluindo eles próprios.
Nota:
Como os elementos mínimo e máximo podem ser repetidos, então, para uma resposta definitiva necessária para encontrar a subsequência mais longa possível, em uma extremidade é mínima e na outra extremidade, elementos máximos da sequência. Se houver várias subsequências mais longas, escolha a subsequência com o maior produto.
Exemplos:
1º exemplo:
Entrada: [5, 7, 3, 2, 1, 2, 2, 7, 5]
Saída: 42
Explicação:
min == 1
, max == 7
. Existem 2 subsequências possíveis com min e max nas extremidades: [1, 2, 2, 7]
e [7, 3, 2, 1]
. Seu comprimento é igual, comparando produtos: 7*3*2*1 == 42
e 1*2*2*7 == 28
. Porque 42 >= 28
, resposta: 42
.
Segundo exemplo:
Entrada: [1, 2, 2, 2, 4, 3, 3, 1]
Saída: 32
Explicação:
min == 1
, max == 4
. 2 subsequências: [1, 2, 2, 2, 4]
e [4, 3, 3, 1]
. Comprimento de [1, 2, 2, 2, 4]
é maior que comprimento de [4, 3, 3, 1]
. produto: 1*2*2*2*4 == 32
=> resposta é 32
.
Exemplo 3d:
Entrada: [1, 2, 3, 4, 3, 3, 1]
Saída: 36
Breve explicação:
min == 1
, max == 4
. 2 subsequências: [1, 2, 3, 4]
e [4, 3, 3, 1]
. 1*2*3*4 == 24
, 4*3*3*1 == 36
, 36 >= 24
=> Resposta é 36
.
Quarto exemplo:
Entrada: [2, 2, 2]
Saída: 8
Explicação:
min == 2
, max == 2
. 2 subsequências diferentes: [2, 2]
e [2, 2, 2]
. Comprimento de [2, 2, 2]
é maior que comprimento de [2, 2]
. produto: 2*2*2 == 8
=> resposta é 8
.
Mais exemplos (aleatórios) :
>>>[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
Verifique sua solução:
Aqui está o Python 3 lambda (788 bytes) , que atende ao requisito da tarefa:
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)
Vencedora:
A solução mais curta vencerá. Todas as linguagens de programação aceitas.
PS: Ficarei feliz com as explicações de suas soluções