剑指offer题目30:连续子数组的最大和
题目描述
输入一个整形数组,数组理有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n).
解答思路
这题对于我来说真是困难。。用到了动态规划。。
迭代数组,每次累加原来的子数组的值,如果原来子数组的值小于0,则相加只会变得更小,从新开始,每次比对最大值和当前值,如果当前值大于最大值,则最大值变成当前值。
实现代码
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
if(array.empty()) {
return 0;
}
int max = array[0];
int cur = array[0]; // 当前数组
int i = 1;
while(i < array.size()) {
//如果加上某个元素sum>=0的话,就加;
//当数组全为负数的时候只要有加法就一定比原来的数小,此时就相当于找出数组内最大的数
cur = cur >= 0 ? cur + array[i] : array[i]; //否则从当前位置重新计算
max = cur > max ? cur : max;
++i;
}
return max;
}
};
作者:大傻逼
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号