第一种是最直观的算法,把每一种连续相邻的和全都算出来进行比较:
#include <vector>
using namespace std;
int maxSubSum1(const vector<int>& a)
{
int maxSum = 0;
for (int i = 0; i < a.size(); i++)
{
for (int j = i; j < a.size(); j++)
{
int thisSum = 0;
for (int k = i; k <= j; k++)
{
thisSum += a[k];
}
if (thisSum > maxSum)
{
maxSum = thisSum;
}
}
}
return maxSum;
}
第二种对最内层的循环改进:
#include <vector>
using namespace std;
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;
}
第三种采用分治的思想:
#include <vector>
#include <utility>
using name

本文探讨了四种不同的算法来解决寻找序列中连续相邻元素之和的最大值问题。第一种算法是遍历序列,计算所有可能的连续子序列和,并保留最大值。
最低0.47元/天 解锁文章
389

被折叠的 条评论
为什么被折叠?



