leetcode-最大子数组和

给你一个整数数组 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

提示:

1 <= nums.length <= 105

-104 <= nums[i] <= 104

思路一 :求区间和,记录最大值。双层for循环枚举区间起始结束点。提前求前缀和预处理,方便求区间和。结果超时
思路二 :区间问题,维护区间状态。考虑双指针。双指针需要考虑何时移动左右指针。如果当前值大于0,一定会加入区间。因为加一个正数会使值更大。如果当前值小于0,分两种情况,区间和sumValue>0,加负值后面还可能大于0;区间和sumValue<0,求和更小,所以左指针移动到当前值。

综上,可以用一个sumValue变量表示区间和,如果sumValue小于0,就让sumValue等于0。当前值为区间起始点,开始求和。

思路一

c 复制代码
class Solution {
    public int maxSubArray(int[] nums) {
        int[] preSum = new int[nums.length+1];
        for(int i = 1;i<=nums.length;i++){
            preSum[i] = preSum[i-1]+nums[i-1];
        }
        int maxRes = Integer.MIN_VALUE;
        for(int i = 0;i<nums.length;i++){
            for(int j = i+1;j<=nums.length;j++){
                Integer sumValue = preSum[j] - preSum[i];
                maxRes = Math.max(maxRes, sumValue);
            }
        }
        return maxRes;
    }
}

思路二

c 复制代码
class Solution {
    public int maxSubArray(int[] nums) {
        int maxRes = Integer.MIN_VALUE;
        int sumValue = 0;
        for(int i = 0;i<nums.length;i++){
            if(sumValue<0){
                sumValue = 0;
            }
            sumValue += nums[i];
            maxRes = Math.max(maxRes, sumValue);
        }
        return maxRes;
    }
}
相关推荐
CoovallyAIHub3 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub3 小时前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
xlp666hub3 小时前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
有意义5 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub7 小时前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
用户726876103377 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect7 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
xlp666hub1 天前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode
ZhengEnCi1 天前
08c. 检索算法与策略-混合检索
后端·python·算法
程序员小崔日记1 天前
大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)
算法·408·计算机考研