输入:
大于零的整数的非空序列,其长度大于1。
输出:
序列的最小和最大元素之间的最长子序列的所有元素的最大乘积,包括其自身。
注意:
因为最小和最大元素可以重复,所以必须找到确定的答案才能找到可能的最长子序列,该子序列的一端是序列的最小元素,而另一端是序列的最大元素。如果存在多个最长子序列,则选择乘积最大的子序列。
例子:
第一个例子:
输入: [5, 7, 3, 2, 1, 2, 2, 7, 5]
输出: 42
说明:
min == 1
,max == 7
。有2个可能的子序列,末端分别为min和max:[1, 2, 2, 7]
和 [7, 3, 2, 1]
。它们的长度相等,因此比较乘积:7*3*2*1 == 42
和1*2*2*7 == 28
。因为42 >= 28
,请回答:42
。
第二个例子:
输入: [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
。
第四个例子:
输入: [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 lambda (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:我很乐意为您提供解决方案的说明