跳到正文
信奥逐课

第 329 课

最大子段和

🔵 基础 约 7 分钟

一句话理解

最大子段和:一段连续子数组的最大和。

为什么要学

Kadane:扫一遍。

讲解

cur=max(a[i], cur+a[i]),ans=max(ans,cur)。全负时 ans 应是最大的那个负数(看题目)。

例子

long long cur = 0, ans = -1e18;
for (int i = 1; i <= n; i++) {
    cur = max(a[i], cur + a[i]);
    ans = max(ans, cur);
}

当前段要么接上,要么从 i 重开。

常见错误

练习 做完再看下一课

Kadane 算法求最大子段和是 O(n)。

在线练习 C++ 在浏览器里编译,代码不会上传

Ctrl / ⌘ + Enter 运行 · Tab 缩进

输出
 

进度保存在本机浏览器里。

左右方向键也可翻课