入力:
長さが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:ソリューションの説明に満足します