二次最大连续子和算法
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
。