Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [−2,1,−3,4,−1,2,1,−5,4]
,
the contiguous subarray [4,−1,2,1]
has the largest sum = 6
.算法
求数组的最大子数组的和。数组
动态规划问题,已知了前k个元素的最大子序列和为maxSub(已经被记录下来了),以及一个临时和sum,若是添加了第k+1这个元素,因为是连续子序列这个限制,因此若是k+1这个元素以前的和是小于0的,那么对于增大k+1这个元素从而去组成最大子序列是没有贡献的,因此能够把sum 置0。spa
算法实现类.net
public class Solution { public int maxSubArray(int[] nums) { // 参数校验 if (nums == null || nums.length < 1) { throw new IllegalArgumentException(); } int max = Integer.MIN_VALUE; int curSum = 0; for (int i : nums) { // 当前和小于0,就将当前值赋给curSum if (curSum <= 0){ curSum = i; } // 不然进行累加 else { curSum += i; } // 保存较大的值 if (max < curSum) { max = curSum; } } return max; } }