53. 最大子序和
* 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
public class MaxSubArray53 {
public static void main(String[] args) {
int[] arr = {5, -6, 8, 2, 1, -6, -1, 9, 8, 5,};
System.out.print(maxSubArray(arr));
}
public static int maxSubArray(int[] nums) {
int cursum = 0;
int maxsum = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
cursum = cursum <= 0 ? nums[i] : cursum + nums[i];
maxsum = Math.max(cursum, maxsum);
}
return maxsum;
}
}
解释:cursum记录遍历到当前元素时所保存的sy子序之和,如果子序之和<=0,没必要继续添加,从新更新cursum;否则用cursum+当前值。
masum记录所有子序之和的最大值。