题目描述:一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3。
分析:从头到尾遍历数组,如果加和小于0,说明之前的累加和并不能够构成最大和数组,所以我们从数组的下一个元素开始累加,但累加的过程中有可能已经遇到了最大和,所以当当前的和比之前的大时记录下来。
踩坑点:当加和小于0时只需要从下个位置作为数组头开始累加即可,因为之前已构不成最大数组,所以不需要从之前没有作为数组头的地方继续便利了。
#include<iostream>
using namespace std;
#include<vector>
int main()
{
int max = 0;
int Max = 0x80000000;
int num = 0;
int n = 0;
vector<int> v;
while (cin >> n)
{
int i = 0;
for (i = 0; i<n; i++){
cin >> num;
v.push_back(num);
}
for (i = 0; i<n; i++){
if (max <= 0){
max = v[i];
}
else{
max += v[i];
}
if (max > Max){
Max = max;
}
}
cout << Max << endl;
v.clear();
}
return 0;
}