letcode算法--19.最大子数组和

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

子数组 是数组中的一个连续部分。

方法一:动态规划

class Solution {
    public int maxSubArray(int[] nums) {
        int n = nums.length;
        if(n < 2){
            return nums[0];
        }else {
            for (int i = 1; i < n; i++) {
                if (nums[i - 1] < 0) {
                    nums[i] = nums[i];
                }
                if (nums[i - 1] > 0) {
                    nums[i] = nums[i - 1] + nums[i];
                }
            }
            Arrays.sort(nums);
            return nums[n - 1];
        }
    }
}

方法二:贪心

class Solution {
    public int maxSubArray(int[] nums) {
        int n = nums.length;
        int res = Integer.MIN_VALUE;
        int sum = 0;
        for (int i = 0; i < n; i ++){
            sum += nums[i];
            res = Math.max(res,sum);
            if (sum < 0){
                sum = 0;
            }
        }
        return res;
    }
}

  

posted @ 2022-11-14 18:49  兴儿  阅读(16)  评论(0)    收藏  举报