题目:连续子序列


解题思路:

首先,不能使用暴力枚举,时间为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;
}

知识点:

双指针,滑动窗口

相关推荐
find1star2 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
迅翼SwiftWing2 小时前
编队系列(总)|固定翼编队如何实现稳定飞行?通信架构、协同算法与工程约束深度解析
算法·架构
LB21122 小时前
力扣160 21 86
算法·leetcode·职场和发展
小智老师PMP4 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
HugoStudio_SWAN4 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
a187927218314 小时前
【算法】动态规划第二篇:双序列 DP 三课——继承、计步与断链
算法·leetcode·动态规划·dp·回溯·暴力·算法讲解
江畔柳前堤5 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
文心快码BaiduComate5 小时前
2026 OPC x AI Coding 趋势案例交流会圆满落幕:一个人就一支研发团队
算法
ACM-moran5 小时前
条件显化(二分单峰函数+构造数列)
算法·推公式·整数三分
闻缺陷则喜何志丹6 小时前
【栈 运算系统】P3719 [AHOI2017初中组] rexp|普及+
c++·算法··洛谷·运算系统