題目描述:一個數組有 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;
}