题目:连续子序列


解题思路:

首先,不能使用暴力枚举,时间为O(n2),超时。以下为正确做法:

假设找到一段区间(其和>=m),如上图黄色部分,那么该区间加上i后面的元素形成的新区间和都>=m,因此以该区间为基础就有n-i+1个区间符合要求。

那么我们只需要从1开始找到每一个恰好大于等于m的黄色区间,再依次把每一个黄色区间为基础的区间的个数相加就得到答案。


AC代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5+9;
int a[N];
ll m;
// 依次找出区间和>=m的滑动窗口,j++ 
int main()
{
     ll sum = 0,ans = 0;
    int n, j = 1;cin >> n >> m;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        sum += a[i];
        if(sum >= m)
        {
            ans += (n-i+1);
            while(j <= i && sum >= m){  // 数组从1开始序号递增,所以当序号i>=j时区间合法 
            sum -= a[j];
            j++;
            if(sum >= m)ans += (n-i+1);
            } 
        }
    }
    cout << ans << '\n';    
    return 0;
}

知识点:

双指针,滑动窗口

相关推荐
午彦琳14 小时前
2026.9.11
数据结构·python·算法
302wanger15 小时前
蛋炒饭周刊 · 第 1 期(2026-09-07至2026-09-11)
算法
shehuiyuelaiyuehao16 小时前
算法43,外观数列,模拟算法+双指针
java·算法
alphaTao16 小时前
LeetCode 每日一题 2026/9/7-2026/9/13
算法·leetcode
kanhaoning16 小时前
Agent 记忆出现重复和矛盾怎么优化:我实测了6种去重和更新策略,找到了低成本维护记忆质量的方法
算法
hans汉斯16 小时前
【计算机科学与应用】层级评论上下文依赖识别数据集构建与研究——以小红书旅游评论数据为例
人工智能·算法·yolo·目标检测·cnn·旅游
码行山野赴时序归途17 小时前
顺序表(Sequential List)详解:从数组到 C 语言实现
c语言·开发语言·数据结构·算法
Lokey86817 小时前
自注意力机制与多头注意力机制
算法
linx29517 小时前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法