哪个是查找所有子阵列总和的最佳算法?

时间:2016-04-05 18:01:24

标签: c++ algorithm data-structures c++14

例如

a[3]={1,2,3}
 1,2,3,1+2,2+3,1+2+3  
     

所以我的程序应该打印
  1
  2
  3
  3
  5
  8

我知道有一个计算总和的公式 但我想要的是计算个别金额的有效方法。

建议使用seg树吗?

1 个答案:

答案 0 :(得分:1)

假设通过子阵列表示某些作者通常将子阵列称为阵列的连续切片,那么您正在寻找Kadane's algorithm

通过逐步找到最大的子阵列来工作。在搜索的任何给定点,该索引上的最大子数组是空数组(sum == 0),或者由比在前一个位置结束的最大子数组多一个元素组成。你可以跟踪你所发现的最好的内容,这样你就可以将子阵列与目前最好的子阵列进行比较,并返回实际的最佳解决方案。

它也可以扩展到多个维度。