53.最大子序和 - 图1

1.题目

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

示例:

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

进阶:

如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

2.思路

定义一个变量,用来存放累加的值。定义一个变量累加数组中的值,并与之前的累加值做比较。

如果某一个数自己的值比之前的数加起来还要大,那么前面无论加了多少都没有用了,从当前数字开始重新加。

    public int maxSubArray(int[] nums) {
        int pre = 0, maxAns = nums[0];
        for (int x : nums) {
            pre = Math.max(pre + x, x);
            maxAns = Math.max(maxAns, pre);
        }
        return maxAns;
    }

官方题解还给了另一种分治法,我没看都懂,所以这里就不贴了。