【深基5.习3】爱与愁的心痛 · 教师题解

【深基5.习3】爱与愁的心痛

解题思路

用滑动窗口维护长度 m 的连续和:读到新数时加入,窗口超过长度后减去离开的数,窗口完整时更新最小值。m=0 时空窗口和为 0。

正确性说明

相邻窗口只相差首尾两个元素,增减操作准确得到下一个窗口和;每个长度 m 的区间都被依次处理,最小值就是答案。

易错点

题目允许 m=0,需单独处理;不是任选 m 个数。

复杂度

时间 O(n),空间 O(n)。

参考代码(C++11)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    for (int &x : a)
        cin >> x;
    if (m == 0) {
        cout << 0 << "\n";
        return 0;
    }
    long long sum = 0, best = LLONG_MAX;
    for (int i = 0; i < n; i++) {
        sum += a[i];
        if (i >= m)
            sum -= a[i - m];
        if (i >= m - 1)
            best = min(best, sum);
    }
    cout << best << "\n";
    return 0;
}
返回题目