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

来源:互联网 发布:淘宝阴茎拉伸器 编辑:程序博客网 时间:2024/06/04 19:07

题目:输入一个整型数组,数组里有整数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度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;}
0 0