题目:连续子序列


解题思路:

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

知识点:

双指针,滑动窗口

相关推荐
AI服务老曹几秒前
算法任务配置完整流程:明厨亮灶项目从0到1怎么做 | AI视频分析算法实践
人工智能·算法·音视频
hahaha601610 分钟前
HLS高层次综合设计--axi之burst纠偏
开发语言·算法·fpga开发·c#
hans汉斯15 分钟前
【计算机科学与应用】基于联合熵驱动改进麻雀搜索优化VMD的DAS信号去噪方法
深度学习·算法·yolo·软件工程·汉斯出版社
词却19 分钟前
机器学习入门:手写数字识别与算法对比
人工智能·算法·机器学习
张欣-男1 小时前
3分钟理解线性代数
线性代数·算法
白狐_7981 小时前
408 数据结构|外部排序优化:怎么减少时间开销
数据结构·算法
小白说大模型1 小时前
Hermes 全配置指南:从裸版到 AI Agent 天花板
大数据·人工智能·学习·算法·机器学习·数据挖掘
a187927218311 小时前
【算法】动态规划入门:从打家劫舍到状态设计的三堂课
算法·leetcode·动态规划·dp·回溯·暴力
淡海水11 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
leobertlan11 小时前
好玩系列:训练一个神经网络模型指导小孩玩游戏2-大局观教练
算法