算法博客之Kadane算法

Posted by 清水咲太 on April 9, 2026

Kadane算法

类型:算法
用途:求一个数组的最大子数组元素和

基本思路

遍历数组,同时维护两个变量:

  • current_sum:以当前元素结尾的最大子数组和
  • max_sum:全局最大子数组和

二者均初始化为数组的第一个元素

核心操作

每移动到一个新元素 x 时:

  • current_sum 可以选择:
    1. x 与之前的子数组连接(current_sum + x
    2. x 重新开始(x
  • 选择两者中较大的值作为新的 current_sum

这样做的原因是:如果之前的子数组和为负,加上它只会让总和更小,不如直接舍弃。

更新完 current_sum 后,再与 max_sum 比较,取较大者作为新的 max_sum

正确性保证

  • 确保先前子数组的总和始终为正(若为负则舍弃)
  • 即使所有元素都是负数,也能选出最大的负数(即负得最少的那一个)

示例题目

本题可用 Kadane 算法的变体求解(最大子数组差)。