1 条题解

  • 0
    @ 1990-11-11 14:41:53

    【深基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;
    }
    
    • 1

    信息

    ID
    90
    时间
    1000ms
    内存
    125MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者