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

网站颜色表郑州百度seo排名公司

网站颜色表,郑州百度seo排名公司,abc公司电子商务网站建设策划书,网站建站平台广告滑动窗口题解 题目传送门: AcWing 154. 滑动窗口 题目描述 给定一个大小为 n ≤ 10^6 的数组和一个大小为 k 的滑动窗口,窗口从数组最左端移动到最右端。要求输出窗口在每个位置时的最小值和最大值。 样例解释: 输入数组为 [1 3 -1 -3 5…

滑动窗口题解

题目传送门:
AcWing 154. 滑动窗口

题目描述

给定一个大小为 n ≤ 10^6 的数组和一个大小为 k 的滑动窗口,窗口从数组最左端移动到最右端。要求输出窗口在每个位置时的最小值和最大值。

样例解释
输入数组为 [1 3 -1 -3 5 3 6 7],k=3
输出:
最小值序列:-1 -3 -3 -3 3 3
最大值序列:3 3 5 5 6 7

题目分析

这是一个典型的滑动窗口问题,需要在O(n)时间复杂度内解决。直接暴力求解对于每个窗口遍历k个元素的话,时间复杂度会是O(nk),对于n=1e6来说不可接受。

解题思路

使用单调队列来优化:

  1. 最小值:维护一个单调递增队列,队首元素即为当前窗口最小值
  2. 最大值:维护一个单调递减队列,队首元素即为当前窗口最大值

算法讲解

  1. 队列中存储的是数组元素的下标而非值本身,这样可以方便判断元素是否在窗口内
  2. 每次移动窗口时:
    • 先检查队首元素是否还在窗口内,不在则弹出
    • 然后从队尾开始,删除所有不满足单调性的元素
    • 最后将当前元素加入队列
  3. 当窗口形成后(i≥k时),输出队首元素

代码实现

#include <bits/stdc++.h>
using namespace std;
// #define int long long
const int N = 1e6 + 10;
int n, k;
int a[N];
int q[N];  // 队列存的是下标void solve()
{cin >> n >> k;for (int i = 1; i <= n; i++)cin >> a[i];// 找每个窗口的最小值int tt = -1, hh = 0;  // 初始化队列for (int i = 1; i <= n; i++){// 维护队列中的元素在窗口范围内while (hh <= tt && i - k + 1 > q[hh])  // 队首元素不在窗口内hh++;// 维护单调递增队列while (hh <= tt && a[q[tt]] >= a[i])  // 队尾元素大于等于当前元素tt--;  q[++tt] = i;  // 将当前元素下标加入队列if (i >= k)  // 窗口形成后才输出cout << a[q[hh]] << " ";}cout << "\n";// 找每个窗口的最大值tt = -1, hh = 0;  // 重置队列for (int i = 1; i <= n; i++){// 维护队列中的元素在窗口范围内while (hh <= tt && i - k + 1 > q[hh])hh++;// 维护单调递减队列while (hh <= tt && a[q[tt]] <= a[i])tt--;q[++tt] = i;if (i >= k)cout << a[q[hh]] << " ";}
}int main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);solve();return 0;
}

重点细节

  1. 队列存储的是下标:这样可以方便判断元素是否还在窗口内
  2. 双条件while循环
    • 第一个while保证队首元素在窗口内
    • 第二个while维护队列的单调性
  3. 窗口形成条件:只有当i≥k时才输出结果
  4. 队列初始化:每次处理前需要重置队列指针

复杂度分析

  • 时间复杂度:O(n),每个元素最多入队和出队一次
  • 空间复杂度:O(n),用于存储队列

总结

单调队列是解决滑动窗口极值问题的高效方法,关键在于:

  1. 维护队列的单调性
  2. 及时移除不在窗口内的元素
  3. 理解队列中存储下标而非值的好处

本题的经典解法值得熟练掌握,类似的滑动窗口问题都可以考虑使用单调队列优化。

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

相关文章:

  • 青岛开发区网站建设多少钱青岛关键词排名系统
  • 珠海建设网站的公司哪家好免费自助建站网站
  • 华人博学网站建设公司厦门seo外包服务
  • 百度怎样才能搜到自己的网站别做网络推广员
  • 安徽省建设项目 备案网站淘宝seo搜索引擎优化
  • 福建微网站建设公司推荐公众号软文推广多少钱一篇
  • 亚马逊网站开发者平台如何做网站推广
  • PHP网站建设项目经验军事新闻头条
  • 帮别人做钓鱼网站吗文娱热搜榜
  • 网站设计的软件青岛网络优化厂家
  • 永州市开发建设投资有限公司网站镇江百度公司
  • 代写网站建设合同长沙网站推广公司
  • 自己怎么1做网站seo关键词优化最多可以添加几个词
  • 针对人群不同 网站做细分友情链接代码
  • 网站策划书基本项目上海不限关键词优化
  • 河南做网站哪个公司好班级优化大师网页版登录
  • 金属建材企业网站建设方案可以免费发广告的网站
  • 沧州网站改版优化上海网络推广培训学校
  • 哪个网站做批发的哈市今日头条最新
  • 富阳网站开发网络营销的特点有哪些特点
  • 建个网站能赚钱吗谷歌浏览器官网入口
  • 企业网站不足百度seo站长工具
  • 加油站顶棚网架价多少钱一平企业营销策划论文
  • 有哪个网站专业做漫画素材的搜索引擎推广成功的案例
  • 婚恋网站建设公司排名阿里指数网站
  • 西宁网站建设高端排名优化哪家专业
  • 做网站和平台多少钱高端网站制作
  • 网站空间 推荐关键词排名提升工具
  • 潍坊网站建设方案推广简述网络营销与传统营销的整合
  • WordPress地址不能修改seo1搬到哪里去了