力扣53最大字数组和

给你一个整数数组 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]
输出:23t



题解:
java 复制代码
class Solution {
    public int maxSubArray(int[] nums) {
        int maxSum = nums[0];
        int currentSum = nums[0];

        for (int i = 1; i < nums.length; i++) {
            currentSum = Math.max(nums[i], currentSum + nums[i]);
            maxSum = Math.max(maxSum, currentSum);
        }

        return maxSum;
    }
}

首先将数组的第一个值作为目前为止某个子数组的累加值(currentSum)和目前为止子数组的最大值(maxSum)

然后循环遍历

currentSum = Math.max(numsi, currentSum + numsi);

用来判断是否需要加上这个数,如果加上会使这个子数组累加值变大,那么currentSum改变成currentSum + numsi,如果不加,那么说明前面的这个子数组的和小于等于0,加上负数或是0不会让这个子数组的和变大

因此,currentSum表示到目前这个num为止的最大子数组之和,可能是num本身,也可能是前面部分子数组加上num的和,但无论如何,这个子数组都是以num结尾

maxSum = Math.max(maxSum, currentSum);

每一次循环都会一次获取到数组中的每一个数,就会调用一次获取currentSum的结果,那这样我们就能获取到每一个以数组中所有元素结尾的最大子数组之和,将这每一个局部最大子数组之和与全局最大子数组之和maxSum进行比较,替换,从而获取到全局最大子数组之和

相关推荐
GuWenyue1 天前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
我叫洋洋1 天前
C ++ [ hello world ]
c语言·c++·算法
奋发向前wcx1 天前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
战族狼魂2 天前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一2 天前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH2 天前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
中达瑞和-高光谱·多光谱2 天前
1nm到8nm光谱分辨率,你的应用该选哪款光谱相机?
算法·高光谱·高光谱相机
香辣牛肉饭2 天前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
旖-旎2 天前
LeetCode 279:完全平方数(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题