Ingresso:
Una sequenza non vuota di numeri interi maggiore di zero, la cui lunghezza è maggiore di 1.
Produzione:
Il più grande prodotto di tutti gli elementi della sottosequenza più lunga tra il minimo e il massimo degli elementi di sequenza compresi loro stessi.
Nota:
Poiché gli elementi minimo e massimo possono essere ripetuti, quindi per una risposta definita necessaria per trovare la sottosequenza più lunga possibile, a un'estremità della quale è un minimo e all'altra estremità il massimo degli elementi della sequenza. Se sono presenti più sottosequenze più lunghe, selezionare la sottosequenza con il prodotto più grande.
Esempi:
1o esempio:
Ingresso: [5, 7, 3, 2, 1, 2, 2, 7, 5]
Produzione: 42
Spiegazione:
min == 1, max == 7. Esistono 2 sottosequenze possibili con estremità min e max: [1, 2, 2, 7]e [7, 3, 2, 1]. La loro lunghezza è uguale, quindi confrontando i prodotti: 7*3*2*1 == 42e 1*2*2*7 == 28. Perché 42 >= 28, risposta: 42.
2 ° esempio:
Ingresso: [1, 2, 2, 2, 4, 3, 3, 1]
Produzione: 32
Spiegazione:
min == 1, max == 4. 2 sottosequenze: [1, 2, 2, 2, 4]e [4, 3, 3, 1]. La lunghezza di [1, 2, 2, 2, 4]è maggiore della lunghezza di [4, 3, 3, 1]. prodotto: 1*2*2*2*4 == 32=> la risposta è 32.
Esempio 3d:
Ingresso: [1, 2, 3, 4, 3, 3, 1]
Produzione: 36
Breve spiegazione:
min == 1, max == 4. 2 sottosequenze: [1, 2, 3, 4]e [4, 3, 3, 1]. 1*2*3*4 == 24, 4*3*3*1 == 36, 36 >= 24=> Risposta è 36.
4 ° esempio:
Ingresso: [2, 2, 2]
Produzione: 8
Spiegazione:
min == 2, max == 2. 2 sottosequenze diverse: [2, 2]e [2, 2, 2]. La lunghezza di [2, 2, 2]è maggiore della lunghezza di [2, 2]. prodotto: 2*2*2 == 8=> la risposta è 8.
Altri esempi (casuali) :
>>>[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
Controlla la tua soluzione:
Ecco Python 3 lambda (788 byte) , che soddisfa i requisiti dell'attività:
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)
Vincitore:
La soluzione più corta vincerà. Sono accettati tutti i linguaggi di programmazione.
PS: Sarò felice delle spiegazioni delle tue soluzioni