最大子序和

问题陈述

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

1
2
3
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

思路分析

如何判断最大呢?可定义一个sum=0,result=nums[0]。遍历数组元素,如果sum<=0,则表明对最大无益,直接跳到sum=nums[i];若sum>0,说明对最大有益,则sum+=nums[i];如何每轮循环取最大值result=max(sum,result)。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution{
public int getMaxValue(int[] nums){
int sum=0,res=nums[0];
for(int c:nums){
if(sum<=0){
sum=c;
}else{
sum+=c;
}
res=Math.max(res,sum);
}
return res;
}
}