介绍:
由这两个问题SO(没有来自同一类怀疑)的启发:打印不相邻的元件的java在最大总和的子阵列的元件和阵列的非相邻元件的最大总和,将被打印。
挑战:
给定一个整数列表,输出由具有最高和的不相邻元素组成的子序列。这里有一些例子:
[1,2,3,-1,-3,2,5]
将导致基于0的索引处[1,3,5]
(总和为9
)[0,2,6]
。[4,5,4,3]
会在基于0的索引处产生[4,4]
(总和8
),[0,2]
或者在基于0的索引处产生[5,3]
(总和8
)[1,3]
。[5,5,10,100,10,5]
会导致基于0的索引或产生[5,100,5]
(总和110
)。[0,3,5]
[1,3,5]
上面这些示例中最重要的是,包含元素的索引彼此之间至少相距2。如果我们[5,5,10,100,10,5]
更深入地看这个例子:我们有以下包含不相邻项的潜在子序列;索引低于它;其总和如下:
[[5],[10],[100],[10],[5],[5],[100,5],[10,5],[10,10],[5,5],[5,10],[5,100],[5,5],[5,10],[5,100],[5,10],[5,100,5],[5,100,5],[5,10,5],[5,10,10]] // non-adjacent subsequences
[[5],[ 4],[ 3],[ 2],[1],[0],[ 3,5],[ 2,5],[ 2, 4],[1,5],[1, 4],[1, 3],[0,5],[0, 4],[0, 3],[0, 2],[1, 3,5],[0, 3,5],[0, 2,5],[0, 2, 4]] // at these 0-based indices
[ 5, 10, 100, 10, 5, 5, 105, 15, 20, 10, 15, 105, 10, 15, 105, 15, 110, 110, 20, 25] // with these sums
^ ^ // and these two maximums
由于最大和为110
,因此我们[5,100,5]
将结果输出。
挑战规则:
- 您可以输出索引+值的键/值对。因此,
[5,100,5]
您可以输出[[0,5],[3,100],[5,5]]
或[[1,5],[3,100],[5,5]]
作为结果(或[[1,5],[4,100],[6,5]]
/[[2,5],[4,100],[6,5]]
当使用基于1的索引而不是基于0的索引时)。- 如果您使用键值对,它们也可以相反或随机排列,因为很明显哪个值是由于成对索引引起的。
- 不允许仅输出没有值的索引。它应该输出值,或者将值/索引作为键值对输出(或者,如果您选择的语言无法使用键值对,则应将两个相同大小的“键”和“值”的单独列表输出)。
- 您可以输出最大和而不是一个最大的所有可能子序列。
- 从示例中可以看到,输入列表也可以包含负值和重复值。你可以假设输入整数是该范围内。
- output-list不能为空,并且必须始终包含至少一个元素(如果列表仅包含负值,则包含单个最低负值的列表将作为结果输出-请参阅最后两个测试用例)。
- 如果存在一个可能的输出,但对于多个不同的索引,则即使它们看起来可能重复,也允许输出它们两者。(即上面的示例,可以
[[5,100,5],[5,100,5]]
为两种可能的索引组合输出)。
测试用例:
Input: Possible outputs: At 0-based indices: With sum:
[1,2,3,-1,-3,2,5] [1,3,5] [0,2,6] 9
[4,5,4,3] [4,4]/[5,3] [0,2]/[1,3] 8
[5,5,10,100,10,5] [5,100,5] [0,3,5]/[1,3,5] 110
[10] [10] [0] 10
[1,1,1] [1,1] [0,2] 2
[-3,7,4,-2,4] [7,4] [1,4] 11
[1,7,4,-2] [7] [1] 7
[1,2,-3,-4,5,6,-7] [2,6] [1,5] 8
[800,-31,0,0,421,726] [800,726]/[800,0,726] [0,5]/[0,3,5]/[0,2,5] 1526
[-1,7,8,-5,40,40] [8,40] [2,4]/[2,5] 48
[-5,-18,-3,-1,-10] [-1] [3] -1
[0,-3,-41,0,-99,-2,0] [0]/[0,0]/[0,0,0] [0]/[3]/[6]/[0,3]/
[0,6],[3,6]/[0,3,6] 0
powerset
是一组子集吗?但看起来您正在返回一组子序列?[4,5,4,3]将导致[4,4]中的任何一个,其中[4,4]显然不是集合。
[5,100,5]
,您的第三个示例两次。