题目

image.png

思路

  • 记录每添加一个新的元素的和,将它与新添加的元素比较大小,取其最大值就能确定前面最大的子序和

    代码

    ```java public int maxSubArray(int[] nums) {

    1. int len = nums.length;
    2. if (len == 0) return 0;
    3. int[] preSun = new int[len];
    4. preSun[0] = nums[0];
    5. int max = nums[0], min = nums[0];
    6. for (int i = 1; i < len; i++) {
    7. preSun[i] += (preSun[i - 1] + nums[i]);
    8. min = Math.min(min, preSun[i - 1]);
    9. max = Math.max(min < 0 ? preSun[i] - min : preSun[i], max);
    10. }
    11. return max;

    }

    //1.递归 int max; public int maxSubArray(int[] nums) {

      max = nums[0];
      recur(nums, nums.length - 1);
      return max;
    

    }

    public int recur(int[] nums, int i) {

      if (i == 0) return nums[0];
      int res = Math.max(recur(nums, i - 1) + nums[i], nums[i]);
      max = Math.max(max, res);
      return res;
    

    }

//2.动态规划
public int maxSubArray(int[] nums) {
    int pre = nums[0], max = nums[0];
    for (int i = 1; i < nums.length; i++) {
        pre = Math.max(pre + nums[i], nums[i]);
        max = Math.max(max, pre);
    }
    return max;
}

``` 最大子序和