当前位置: 首页 > news >正文

题目:连续子序列


解题思路:

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

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

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


AC代码:

#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;
}

知识点:

        双指针,滑动窗口

http://www.lryc.cn/news/464879.html

相关文章:

  • 深入解析:Nacos AP 模式的实现原理与应用场景
  • snmpnetstat使用说明
  • linux线程 | 同步与互斥 | 互斥(下)
  • 2024-10-17 问AI: [AI面试题] 讨论 AI 的挑战和局限性
  • go基础(一)
  • python忽略warnings 的方法
  • 2024年底蓝奏云最新可用API接口列表 支持优享版 无需手动抓取cookie
  • Linux常用命令详细解析(含完整命令演示过程)
  • 《使用Gin框架构建分布式应用》阅读笔记:p101-p107
  • 014集——c#实现打开、另存对话框(CAD—C#二次开发入门)
  • 全面升级:亚马逊测评环境方案的最新趋势与实践
  • Java中的异步编程模型
  • opencv 按位操作
  • 【Bug】STM32串口空闲中断接收不定长数据异常
  • 使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题
  • Java入门4——输入输出+实用的函数
  • 《当尼采哭泣》
  • TOMCAT Using CATALINA——OPTS,闪退解决方法(两种)
  • Android音视频 MediaCodec框架-启动编码(4)
  • # Go 语言中的 Interface 和 Struct
  • SSM与Springboot是什么关系? -----区别与联系
  • MATLAB小波变换图像融合系统
  • nginx-安装和80端口映射多域名和ssl
  • SVN小乌龟 create patch 和 apply patch 功能
  • #MySQL `SELECT` 语句执行流程详解
  • docker容器运行一段时间提示Failed to initialize NVML: Unknown Error
  • PPT自动化:快速更换PPT图片(如何保留原图片样式等参数更换图片)
  • 秒懂MVC, MVP, MVVM框架
  • IDEA社区版如何用tomcat运行war包
  • 如何使用 Git Cherry-Pick 和 Reset 处理误提交,并确保安全回滚