algorithm - 最大连续负和或最小正子序列和问题

标签 algorithm max programming-pearls

我们都听说过 bentley 的美丽的珍珠问题 求解最大子序列和:

maxsofar = 0;
maxcur = 0;
for (i = 0; i < n; i++) {
  maxcur = max(A[i] + maxcur, 0);
  maxsofar = max(maxsofar, maxcur);
}

如果我们添加一个小于 M 的附加条件最大子序列会怎样?

最佳答案

这应该做到这一点。我说得对吗?

int maxsofar = 0;
for (int i = 0; i < n - 1; i++) {
   int maxcur = 0;
   for (int j = i; j < n; j++) {
      maxcur = max(A[j] + maxcur, 0);
      maxsofar = maxcur < M ? max(maxsofar, maxcur) : maxsofar;
   }
}

不幸的是,这是 O(n^2)。当 maxcur >=M 时,您可以通过打破内部循环来加快它的速度,但仍然 n^2 仍然存在。

关于algorithm - 最大连续负和或最小正子序列和问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6667196/

相关文章:

javascript - 我需要将一组文件从原始位置复制到新文件夹

arrays - 需要动态规划的爬山问题

c++ - 如何返回3个值之间的最大值?

algorithm - 如何删除重复的矩阵(以数组表示)?

javascript - 如何在 jQuery 中向变量添加最大值和最小值

python - 每次值列表中的符号变化时计算差异

java - 为这些类型的字节级操作进行 Java 编码的最佳方法是什么?

regex - 将多个正则表达式组合成一个/构建小正则表达式以匹配一组固定字符串

algorithm - 计算有向图中得分最高的路径