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

怎么寻找做有意做网站的客户百度站长之家工具

怎么寻找做有意做网站的客户,百度站长之家工具,推广计划方案模板,做带数据库的网站洛谷P1886 滑动窗口【模板】单调队列详解 题目描述 给定一个长度为n的整数序列,要求输出所有长度为k的连续子数组的: 最小值(第一部分输出)最大值(第二部分输出) 数据范围: 1 ≤ k ≤ n ≤…

洛谷P1886 滑动窗口【模板】单调队列详解

题目描述

给定一个长度为n的整数序列,要求输出所有长度为k的连续子数组的:

  1. 最小值(第一部分输出)
  2. 最大值(第二部分输出)

数据范围:

  • 1 ≤ k ≤ n ≤ 10^6
  • 时间限制:1s
  • 空间限制:128MB

算法思路

本题是单调队列模板题,核心思想是通过维护一个双端队列来高效获取滑动窗口的极值。

暴力法缺陷

直接对每个窗口遍历求极值的时间复杂度为O(nk),当n=1e6时会超时。需要优化到O(n)时间复杂度。

单调队列原理

维护一个双向队列,保证队列元素按单调顺序排列:

  • 最小值队列:保持升序(队头到队尾递增)
  • 最大值队列:保持降序(队头到队尾递减)

当新元素入队时:

  1. 移除所有比当前元素大的元素(最小值队列)或小的元素(最大值队列)
  2. 将当前元素加入队尾
  3. 移除所有超出窗口范围的队头元素

代码解析

#include<bits/stdc++.h>
using namespace std;const int MAXN = 1e6 + 10;
int n, k;
int a[MAXN];         // 原始数组
int que[MAXN];        // 单调队列
int ffront, bback;    // 队列头尾指针int main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> n >> k;for(int i = 1; i <= n; ++i) cin >> a[i];// 处理最小值部分ffront = 1, bback = 0;for(int i = 1; i <= n; ++i) {// 移除超出窗口的队头元素while(ffront <= bback && que[ffront] < i - k + 1) ffront++;// 维护单调性:移除所有>=当前值的队尾元素while(ffront <= bback && a[que[bback]] >= a[i]) bback--;que[++bback] = i;// 窗口形成后输出结果if(i >= k) cout << a[que[ffront]] << " ";}cout << "\n";// 处理最大值部分ffront = 1, bback = 0;for(int i = 1; i <= n; ++i) {while(ffront <= bback && que[ffront] < i - k + 1) ffront++;// 维护单调性:移除所有<=当前值的队尾元素while(ffront <= bback && a[que[bback]] <= a[i]) bback--;que[++bback] = i;if(i >= k) cout << a[que[ffront]] << " ";}return 0;
}

关键点说明

  1. 队列初始化

    • 使用数组模拟双端队列,ffront指向队头,bback指向队尾
    • 初始时队列为空(ffront > bback
  2. 窗口维护

    • 窗口有效性检查que[ffront] < i - k + 1判断队头是否已出窗口
    • 单调性维护:通过while循环移除不符合单调性的队尾元素
  3. 时间复杂度

    • 每个元素最多入队出队各一次,总时间复杂度O(n)

算法对比

方法时间复杂度空间复杂度适用场景
暴力法O(nk)O(1)n≤1e4
优先队列O(nlogk)O(k)需要动态极值但可接受log
单调队列O(n)O(k)滑动窗口极值问题

注意事项

  1. 数组越界:使用1-based索引避免边界判断错误
  2. 队列为空:本题保证k≤n,无需额外处理空队列情况
  3. 输出格式:注意两部分输出间的换行符

扩展应用

单调队列思想可应用于:

  1. 动态规划优化(如DP滑动窗口技巧)
  2. 实时数据流处理
  3. 股票买卖问题(求某段时间内的最大利润)

总结

本题通过单调队列将滑动窗口极值问题的时间复杂度优化到线性级别。核心在于理解:

  • 如何维护队列的单调性
  • 如何高效移除过期元素
  • 如何处理窗口滑动时的边界情况

掌握此模板可解决LeetCode 239、剑指Offer 59等经典题目。

http://www.dtcms.com/wzjs/472221.html

相关文章:

  • 国内单页网站电商运营模式
  • 四川省建设勘察设计网站百度商家怎么入驻
  • 微信网站应用开发百度怎么发帖做推广
  • 常州网站排名优化网络营销渠道
  • 网站建设话术开场白最新中高风险地区名单
  • 切实加强政府门户网站建设关键词是怎么排名的
  • 招远做网站免费浏览外国网站的软件
  • 广州网站建设(信科网络)山东一级造价师
  • 武汉注册营业执照哈尔滨网络seo公司
  • 做网站 宁波适合奖励自己的网站免费
  • 德州网站制作哪家好seo的基本步骤
  • 建网站的宽带多少福建网络seo关键词优化教程
  • 做网站外包大学生自己的网站
  • 免费微信网站源码阿里指数app下载
  • 长沙的汽车网站建设互联网广告代理加盟
  • 贵州快速整站优化网络营销师证书含金量
  • 网站空间租用有哪些服务微信公众号推广网站
  • 宝鸡做网站设计梅州seo
  • 网站用户注册怎么做优化seo公司哪家好
  • 企业网站源码库淘宝店怎么运营和推广
  • 宝安做棋牌网站建设哪家技术好百度数据研究中心官网
  • 做网站的变成语言哪类最简单今日热点新闻15条
  • 产品设计私单网站营销网站优化推广
  • 一个服务器可以放多少网站专业网页设计和网站制作公司
  • 汕头政府网站建设dw友情链接怎么设置
  • 电子商务网站建设的答案西安seo站内优化
  • wordpress 标签 图片 altseo网站关键词优化费用
  • 网站推广哪种方法最seo广州工作好吗
  • 国内免费的建网站平台东莞做网站最好的是哪家
  • 沧州市有哪些网络公司网站优化推广公司