力扣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(nums[i], currentSum + nums[i]);

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

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

maxSum = Math.max(maxSum, currentSum);

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

相关推荐
仰泳的熊猫4 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
似水明俊德7 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
无极低码7 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发7 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
superior tigre8 小时前
22 括号生成
算法·深度优先
腾阳9 小时前
99%的人忽视了这一点:活着本身就是人生的意义,别让抑郁和内耗成为你的枷锁!
经验分享·程序人生·职场和发展·跳槽·学习方法·媒体
不吃西红柿的859 小时前
[职场] 内容运营求职简历范文 #笔记#职场发展
笔记·职场和发展·内容运营
liyang_8309 小时前
邦芒秘诀:职场高手都具备的三个特征
职场和发展
普通网友9 小时前
十大秘闻:揭秘霍兰德职业兴趣理论的未知面!
职场和发展·求职招聘·职场发展·单一职责原则