c++ - 哪个是找到所有子数组总和的最佳算法?

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

例如如果

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

so my program should print
1
2
3
3
5
8

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

建议使用 seg 树?

最佳答案

假设你所说的子数组是指一些作者通常所说的子数组是数组的连续切片,你正在寻找 Kadane's algorithm .

它的工作原理是逐步找到最大的子数组。在搜索的任何给定点,该索引上的最大子数组要么是空数组(和 == 零),要么由比前一个位置结束的最大子数组多一个元素组成。您跟踪找到的最佳解决方案,以便您可以将子阵列与迄今为止最好的解决方案进行比较,并返回实际的最佳解决方案。

还可以扩展到多个维度。

关于c++ - 哪个是找到所有子数组总和的最佳算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36433741/

相关文章:

c++ - TMP : how to generalize a Cartesian Product of Vectors?

C++ - 不是类或命名空间错误

c++ - 我得到 "void value not ignored as it ought to be"我该怎么办?

algorithm - 光栅路径跟随算法

java - 找到差异最小的回文

c# - 递归搜索二叉树 C#

c++ - 使用 cin.ignore 和 cin.clear C++ 时的奇怪行为

c++ - 如何在 Windows 上将 Clang 工具包与 Qt Creator 一起使用?

用字母创建图表

javascript - 二叉树添加未定义的节点