题目:
分析:用临时变量保存连续和,当小于0时重置为0,继续累加,每次当临时和大于max时,更新max
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> v;
v.resize(n);
for(int i=0;i<n;i++)
{
cin>>v[i];
}
int max=v[0];
int tmp=0;//记录累加和
for(int i=1;i<n;i++)
{
tmp+=v[i];
if(tmp>max)//累加和>max,则更新max
{
max=tmp;
}
if(tmp<=0)//累加和<=0,则将其重置为0,继续
{
tmp=0;
}
}
cout<<max<<endl;
return 0;
}
另一种写法:
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i = 0;i < n;++i){
cin>>a[i];
}
int sum = a[0];
int max = a[0];
// 从第二个数起开始寻找使和最大的
for(int i = 1;i < n;++i){
if(sum >= 0){
// 之前的和不小于0,那么它对获得最大和就是有贡献的
sum += a[i];
}else{
// 前面和小于0,没必要再计入,sum从当前开始再计起
sum = a[i];
}
if(max < sum)max = sum;
}
cout<<max;
return 0;
}