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

最简单记忆口诀

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

相关推荐
小白zlm2 小时前
连续系统-离散系统的转换
算法·嵌入式·电机控制·pmsm
汀、人工智能2 小时前
03 - 运算符
数据结构·算法·数据库架构·位运算·哈希表·03 - 运算符
小肝一下2 小时前
每日两道力扣,day4
c++·算法·leetcode·职场和发展
菜鸟‍2 小时前
【论文学习】Disco:基于邻接感知协同着色的密集重叠细胞实例分割方法
人工智能·学习·算法
牧天白衣.2 小时前
力扣215.数组中的第K个最大元素
算法·leetcode
cxr8282 小时前
控制理论基础
人工智能·算法
平平淡淡才是true2 小时前
偏序关系、哈斯图、最长链长度、最长链条数
算法
小钊(求职中)3 小时前
算法知识、常用方法总结
java·算法·排序算法·力扣
paeamecium3 小时前
【PAT甲级真题】- Talent and Virtue (25)
数据结构·c++·算法·pat