boxmoe_header_banner_img

Hello! 欢迎来到不如画七的空间!

加载中

文章导读

04.最大子序和


avatar
ensiezadi 2025年8月27日 31

最大子序和

题目

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

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

具体思路

  • 从头记录,如果当前加值小于0,重新开始计算
  • 如果大于,可以继续加,并与最大值进行比较

代码

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int res = INT_MIN;
        int cur = 0;
        for (int i = 0; i < nums.size(); i++) {
            cur += nums[i];
            if (cur > res)
                res = cur;
            if (cur < 0)
                cur = 0;
        }
        return res;
    }
};

Java

class Solution {
    public int maxSubArray(int[] nums) {
        int res = nums[0];
        int cur = 0;
        for (int i = 0; i < nums.length; i++) {
            // if (cur >= 0) {
            //     cur += nums[i];
            // } else {
            //     cur = nums[i];
            // }
            cur =  cur >= 0 ? cur + nums[i] : nums[i];
            res = Math.max(cur, res);
        }
        return res;
    }
}

动态规划

求 0 − n 的最大连续数组长度: f ( i ) = M a x [ ( f ( i − 1 ) , f ( i − 1 ) + n u m s [ i ] ]

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


评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码
不如画七
2025 年 10 月
 123456
78910111213
14151617181920
21222324252627
282930