Wkład:
Niepusta sekwencja liczb całkowitych większych niż zero, których długość jest większa niż 1.
Wydajność:
Największy iloczyn wszystkich elementów najdłuższego podsekwencji między minimum i maksimum elementów sekwencji łącznie z nimi samymi.
Uwaga:
Ponieważ elementy minimalne i maksymalne mogą być powtarzane, to do określonej odpowiedzi niezbędnej do znalezienia najdłuższej możliwej podsekwencji, na której jednym końcu jest minimum, a na drugim końcu maksymalne elementy sekwencji. Jeśli istnieje wiele najdłuższych podsekwencji, wybierz podciąg z największym produktem.
Przykłady:
Pierwszy przykład:
Wkład: [5, 7, 3, 2, 1, 2, 2, 7, 5]
Wydajność: 42
Objaśnienie:
min == 1
, max == 7
. Istnieją 2 możliwe podciągi z min i max na końcach: [1, 2, 2, 7]
i [7, 3, 2, 1]
. Ich długość jest równa, więc porównując produkty: 7*3*2*1 == 42
i 1*2*2*7 == 28
. Ponieważ 42 >= 28
, odpowiedź: 42
.
Drugi przykład:
Wkład: [1, 2, 2, 2, 4, 3, 3, 1]
Wydajność: 32
Objaśnienie:
min == 1
, max == 4
. 2 podsekwencje: [1, 2, 2, 2, 4]
i [4, 3, 3, 1]
. Długość [1, 2, 2, 2, 4]
jest większa niż długość [4, 3, 3, 1]
. produkt: 1*2*2*2*4 == 32
=> odpowiedź brzmi 32
.
Przykład 3d:
Wkład: [1, 2, 3, 4, 3, 3, 1]
Wydajność: 36
Krótkie wyjaśnienie:
min == 1
, max == 4
. 2 podsekwencje: [1, 2, 3, 4]
i [4, 3, 3, 1]
. 1*2*3*4 == 24
, 4*3*3*1 == 36
, 36 >= 24
=> Odpowiedź jest36
.
Czwarty przykład:
Wkład: [2, 2, 2]
Wydajność: 8
Objaśnienie:
min == 2
, max == 2
. 2 różne podsekwencje: [2, 2]
i [2, 2, 2]
. Długość [2, 2, 2]
jest większa niż długość [2, 2]
. produkt: 2*2*2 == 8
=> odpowiedź brzmi 8
.
Więcej (losowych) przykładów:
>>>[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
Sprawdź swoje rozwiązanie:
Oto lambda Python 3 (788 bajtów) , która spełnia wymagania tego zadania:
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)
Zwycięzca:
Najkrótsze rozwiązanie wygra. Wszystkie języki programowania są akceptowane.
PS: Będę zadowolony z wyjaśnień dotyczących twoich rozwiązań