尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

栈与队列实例精讲|滑动窗口

发布时间:2026/9/4 9:10:14

资讯中心
01
ARTICLE

栈与队列实例精讲|滑动窗口

栈与队列实例精讲|滑动窗口
题目描述 滑动窗口假设给定一个大小为 n ≤ 10^6 数组。有一个大小为 k 的滑动窗口它从数组的最左边移动到最右边。你只能在窗口中看到 k 个数字。每次滑动窗口向右移动一个位置。以下是一个例子该数组为 [1 3 -1 -3 5 3 6 7] k 为 3 。你的任务是确定滑动窗口位于每个位置时窗口中的最大值和最小值。输入格式输入包含两行。第一行包含两个整数 n 和 k 分别代表数组长度和滑动窗口的长度。第二行有 n 个整数代表数组的具体数值。同行数据之间用空格隔开。输出格式输出包含两个。第一行输出从左至右每个位置滑动窗口中的最小值。第二行输出从左至右每个位置滑动窗口中的最大值。输入样例8 3 1 3 -1 -3 5 3 6 7输出样例-1 -3 -3 -3 3 3 3 3 5 5 6 7解题代码#include bits/stdc.h using namespace std; int n,k,a[500010]; dequeintq; int main(){ scanf(%d%d,n,k); for(int i1;in;i) scanf(%d,a[i]); for(int i1;in;i){ if(!q.empty()i-q.front()k) q.pop_front(); while(!q.empty()a[i]a[q.back()]) q.pop_back(); q.push_back(i); if(ik) printf(%d ,a[q.front()]); } printf(\n); while(!q.empty()) q.pop_back(); for(int i1;in;i){ if(!q.empty()i-q.front()k) q.pop_front(); while(!q.empty()a[i]a[q.back()]) q.pop_back(); q.push_back(i); if(ik) printf(%d ,a[q.front()]); } }单调栈 / 单调队列还有更加广泛的运用例如某些动态规划问题需要使用单调队列进行优化这类问题将在动态规划专题中再展开介绍。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。