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

相关推荐
吃着火锅x唱着歌5 小时前
LeetCode 1019.链表中的下一个更大节点
算法·leetcode·链表
凌波粒6 小时前
LeetCode--404.左叶子之和(二叉树)
算法·leetcode·职场和发展
paeamecium6 小时前
【PAT甲级真题】- A+B in Hogwarts
c++·算法·pat考试·pat
青山师6 小时前
二叉树与BST深度解析:遍历算法与平衡策略
数据结构·算法·面试·二叉树·算法与数据结构·java面试·数据结构与算法分析
绝知此事6 小时前
【算法突围 03】核心算法思想:分治/递归/动态规划与 LeetCode 高频真题解析
算法·leetcode·面试·动态规划
AI科技星6 小时前
第二章 平行素数对网格:矩形→等腰梯形拓扑变换(完整公理终稿)
c语言·开发语言·线性代数·算法·量子计算·agi
AI视觉网奇6 小时前
blender bpy对齐物体
算法
吃好睡好便好7 小时前
在Matlab中绘制阶梯图
开发语言·人工智能·学习·算法·机器学习·matlab
Deep-w7 小时前
【MATLAB】基于 MATLAB 的离网光伏储能微电网容量优化仿真研究
开发语言·算法·matlab