二次最大连续子和算法

int maxSubSum2( const vector<int> & a)
{
  int maxSum = 0;
  for (int i = 0; i< a.size(); ++i)
  {
    int thisSum = 0;
    for (int j = i; j < a.size(); ++j)
    {
      thisSum += a[j];
      if (thisSum > maxSum)
        maxSum = thisSum;
    }
  }
  return maxSum;
}

我想知道是否有人能解释一下这个算法的工作原理?我擅长for循环,但不擅长嵌套循环。每当第8行的外部for循环运行时,“thisSum”总是0还是静态的?
非常感谢你!我真的很难理解这个算法请帮帮我!我真的很感谢你的时间和努力。

最佳答案

外循环迭代向量a的每个元素在每次迭代中,i将是当前元素的索引,它将thisSum重置为0,然后执行内部循环。
内部循环从i开始遍历每个元素在每次迭代中,j将是其当前元素的索引然后计算thisSum中这些元素的总和。
如果外部循环的值高于它已经包含的值,则它将用maxSum替换thisSum
所以如果向量包含:

1 7 -10 2 4

外循环的连续迭代将计算以下值:
1 + 7 + -10 + 2 + 4 = 4
7 + -10 + 2 + 4 = 3
-10 + 2 + 4 = -4
2 + 4 = 6
4 = 4

第一次迭代时,它会将thisSum设置为maxSum。在第二次和第三次迭代之后,4将为false,因此它不会更改它在第4次迭代中,thisSum > maxSum,因此它将6 > 4设置为maxSum。最后一次迭代不会改变它。最后,它将返回6

09-11 17:53