题目:输入一个整型数组,数组里有整数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度O(n)。
思路:从头到尾逐个累加数组中的每个数字,记录最大值,当和小于0,重新累加,若有大于之前记录的最大值,则更新。
#include <iostream>
#include <vector>
using namespace std;
int SubMax(vector<int> num, int length) {
if (num.empty() || length <= 0)
return -1;
int curMax = 0;
int nextMax = 0;
for (int i = 0; i < length; ++i) {
nextMax += num[i];
if (nextMax > curMax) {
curMax = nextMax;
} else if (nextMax < 0) {
curMax = 0;
nextMax = 0;
}
}
return curMax;
}
int main() {
vector<int> num;
int a;
while (cin >> a) {
num.push_back(a);
}
a = num.size();
a = SubMax(num, a);
cout << a << endl;
return 0;
}