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 == 42e 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