当先锋百科网

首页 1 2 3 4 5 6 7

题目链接

思路:从0开始遍历数组,准备一个curSum计算当前和,sum用来计算最大和。每次遍历到一个数,curSum等于curSum与此数相加,sum等于当前sum和curSum中哪个更大,如果此时curSum结果小于0,则此时的curSum肯定不会是最大和,让curSum=0重新开始相加。遍历结束,即可找出最大子序和。

    public int maxSubArray(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int curSum = 0;
        int sum = nums[0];
        for (int i = 0; i < nums.length; i++) {
            curSum += nums[i];
            sum = Math.max(curSum, sum);
            if (curSum < 0) {
                curSum = 0;
            }
        }
        return sum;
    }