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

相关推荐
皮皮哎哟5 分钟前
冒泡排序与数组传递全解析 一维二维指针数组及二级指针应用指南
c语言·算法·冒泡排序·二维数组·指针数组·传参·二级指针
m0_561359676 分钟前
C++代码冗余消除
开发语言·c++·算法
近津薪荼17 分钟前
优选算法——滑动窗口1(单调性)
c++·学习·算法
diediedei18 分钟前
嵌入式C++驱动开发
开发语言·c++·算法
燃于AC之乐23 分钟前
《算法实战笔记》第10期:六大算法实战——枚举、贪心、并查集、Kruskal、双指针、区间DP
算法·贪心算法·图论·双指针·区间dp·二进制枚举
diediedei28 分钟前
高性能计算通信库
开发语言·c++·算法
蒸蒸yyyyzwd28 分钟前
算法学习笔记
笔记·算法
练习时长一年37 分钟前
LeetCode热题100(颜色分类)
算法·leetcode·职场和发展
说文科技44 分钟前
大模型项目实战之dpo微调
人工智能·算法
睡一觉就好了。1 小时前
归并排序——递归与非递归的双重实现
数据结构·算法·排序算法