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

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

示例 1:

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

输入:nums = [1]
输出:1
示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

class Solution {
    public int maxSubArray(int[] nums) {
        // int maxValue = -999;
        // for (int end = 0; end < nums.length; end++) {
        //     int sum = 0;
        //     for (int start = end; start >= 0; start--) {
        //         sum += nums[start];
        //         maxValue = Math.max(maxValue, sum);
        //     }
        // }
        // return maxValue;
    
        int preMax = 0, maxValue = nums[0];
        for (int x : nums) {
            // 如果加上一个数变小了,就不如维持原状
            preMax = Math.max(x, preMax + x);
            maxValue = Math.max(maxValue, preMax);
        }
        return maxValue;
    }
}


 public static int maxSubArray(int[] nums) {
        if(nums.length == 1){
            return nums[0];
        }
        int maxSubArray = nums[0];
        int sum = nums[0];
        for(int i = 1; i < nums.length; i++){
            //sum要想有资格继续壮大 就必须大于 0 否则还不如恢复0
            sum = Math.max(sum,0);
            sum += nums[i];
            //maxSubArray始终取最大值
            maxSubArray = Math.max(sum,maxSubArray);
        }
        return maxSubArray;
    }
posted on 2025-07-09 19:52  caoshikui  阅读(9)  评论(0)    收藏  举报