力扣热门100题之最大子数组和

最优解法:Kadane 算法(一遍遍历)

核心思想

  • 遍历数组时,维护当前最大和
  • 如果前面的和是负数 ,只会拖累当前数,直接抛弃前面
  • 否则,把当前数加进去
  • 全程记录最大值

完整代码实现:

java 复制代码
class Solution {
    public int maxSubArray(int[] nums) {
        if(nums==null || nums.length == 0){
            return 0;
        }

        // 当前连续子数组的最大和
        int currentMax = nums[0];
        // 全局最大和(最终答案)
        int globalMax = nums[0];

        // 从第 2 个数开始遍历
        for(int i = 1;i<nums.length;i++){
            // 核心:
            // 如果 currentMax 是负数 → 抛弃前面,从当前数重新开始
            // 如果 currentMax 是正数 → 加上当前数,继续延长子数组
            currentMax = Math.max(nums[i], currentMax + nums[i]);

            // 更新全局最大值
            globalMax = Math.max(globalMax, currentMax);
        }
        return globalMax;
    }
}

最简单记忆口诀

前面是负的就扔掉,前面是正的就加上。 全程记录最大值。

相关推荐
aramae2 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能2 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
INGNIGHT6 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_839080547 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山7 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds7 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
Tisfy7 小时前
LeetCode 3498.字符串的反转度:一次遍历
leetcode·字符串·题解·遍历
a187927218317 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx8 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_307779138 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab