我有一个整数序列(正面和负面),如下所示:
12,-54,32,1,-2,-4,-8,12,56,-22,-21,4,17,35
我需要找到这个序列的任何子序列(当然还有该子序列的起始索引和结束索引)的最差结果(较小的值总和)。
有没有办法做到这一点不是2 ^ n(逐个计算所有可能的序列)?
例如,使用这个简单的序列:
1,2,-3,4,-6,4,-10,3,-2
值的较小总和将是子序列:
-6,4,-10 (with start index 4 and end index 6)
答案 0 :(得分:1)
通过更改每个项目的符号,可以将找到最小值的问题转换为最大搜索。
对于最大子序列,存在众所周知的算法,参见例如here
您可以转换列表并应用所述算法或稍微修改算法本身(min而不是max或minus而不是plus),以便使用原始列表。