力扣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进行比较,替换,从而获取到全局最大子数组之和

相关推荐
怕浪猫5 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i6 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J7 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
weixin_307779138 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
朝朝辞暮i8 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
朝朝辞暮i9 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法
ychqsq9 小时前
207.炸酱面
经验分享·职场和发展
Godspeed Zhao9 小时前
现代智能雷达技术14——算法(0)
线性代数·算法·雷达
可乐ea9 小时前
Agent 模型分级升级路由:用置信度阈值把贵模型省下来
人工智能·算法·机器学习·结构化输出·置信度路由·模型升级路由·大模型成本优化
Navigator_Z10 小时前
LeetCode //C - 1278. Palindrome Partitioning III
c语言·算法·leetcode