力扣热门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;
    }
}

最简单记忆口诀

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

相关推荐
写代码写到手抽筋3 小时前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
xieliyu.3 小时前
Java算法精讲:双指针(二)
java·开发语言·算法
wayz114 小时前
Momentum:PSL(心理线指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
8Qi84 小时前
LeetCode 213:打家劫舍 II(House Robber II)—— 题解 ✅
算法·leetcode·职场和发展·动态规划
三品吉他手会点灯5 小时前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法
乐迪信息5 小时前
乐迪信息:AI算法盒子实时识别船舶烟雾与火焰异常
大数据·人工智能·算法·安全·目标跟踪
J-Tony115 小时前
【JVM】根可达算法
jvm·算法
艾iYYY5 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法
Lsk_Smion5 小时前
力扣实训 _ [75].颜色分类 _ 杨辉三角
数据结构·算法·leetcode