您的位置:首页 > 职场人生

剑指offer面试题31:连续子数组的最大和

2016-09-21 08:28 225 查看
题目:输入一个整型数组,数组里有整数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: