1 条题解
-
0
文字教学
这道题是经典的最大子段和问题,使用Kadane算法在线性时间内解决。核心思路是:
- 维护两个变量:
cur表示以当前位置结尾的最大子段和,ans表示全局最大子段和。 - 遍历数组时,对每个数决定是将其加入前一个子段,还是以它为起点开始新子段,取较大值更新
cur。 - 每次更新
cur后,用cur更新全局最大值ans。
代码
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 10; int a[N]; int main() { int n; cin >> n; for (int i = 0; i < n; ++i) cin >> a[i]; long long cur = a[0], ans = a[0]; for (int i = 1; i < n; ++i) { cur = max((long long)a[i], cur + a[i]); ans = max(ans, cur); } cout << ans << endl; return 0; } - 维护两个变量:
- 1
信息
- ID
- 115
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 4
- 已通过
- 4
- 上传者
京公网安备 11011102002149号