日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单调队列板子:求滑动窗口中最大值和最小值

發(fā)布時(shí)間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单调队列板子:求滑动窗口中最大值和最小值 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

      • 題目分析
        • 初始思路
        • 單調(diào)隊(duì)列優(yōu)化的思路
        • 代碼1:數(shù)組模擬單調(diào)隊(duì)列的代碼
    • 代碼2:deque容器實(shí)現(xiàn)

能用到單調(diào)隊(duì)列的情景比較有限: 1.典型的有滑動(dòng)窗口的最值, 2.找到里它最近的比它大(小)的元素。

題目大意:滑動(dòng)窗口求最值:您的任務(wù)是確定滑動(dòng)窗口位于每個(gè)位置時(shí),窗口中的最大值和最小值。

題目分析

初始思路

如果不考慮單調(diào)隊(duì)列優(yōu)化,普通的做法我們?nèi)绾嗡伎嫉哪?#xff1f;

首先是實(shí)現(xiàn)窗口的滑動(dòng): 維護(hù)一個(gè)隊(duì)列,新元素插入到隊(duì)頭,隊(duì)尾元素刪除掉,實(shí)現(xiàn)滑動(dòng)窗口右移一位。 n次操作

其次是求窗口內(nèi)的最值: 遍歷一遍 k次操作

樸素做法總的時(shí)間復(fù)雜度是O(n×k)O(n\times k)O(n×k)

以上是暴力的做法,也是最容易想到的做法。

單調(diào)隊(duì)列優(yōu)化的思路

以求最小值為例:該數(shù)組為[1 3 -1 -3 5 3 6 7],k為3。

開始時(shí)[1 3 -1] 后移一位變成 [ 3 -1 -3] ,如果 -3 是最小值,那么它前面的 -1 和 3就再也用不到了,是多余的,可以刪掉。 刪掉多余的元素之后, 元素就有了單調(diào)性!找滑動(dòng)窗口內(nèi)的最小值就是隊(duì)頭元素,時(shí)間復(fù)雜度為O(1) ,那么這道題單調(diào)隊(duì)列總的時(shí)間復(fù)雜度就是O(n).

代碼1:數(shù)組模擬單調(diào)隊(duì)列的代碼

思路說完了,上代碼和代碼解釋。

找最小值的思路

一個(gè)隊(duì)列維護(hù)當(dāng)前窗口中的單調(diào)上升的情況。當(dāng)前窗口的最小值就是隊(duì)頭q[tt]。

i表示當(dāng)前窗口的最右邊下標(biāo),k表示窗口長(zhǎng)度,則窗口最左邊下標(biāo)為i-k+1。即當(dāng)前滑動(dòng)窗口 為[隊(duì)首,隊(duì)尾]=[ i-k +1 , i].

隊(duì)列數(shù)組q中存放的是點(diǎn)的下標(biāo),對(duì)于數(shù)組模擬的隊(duì)列q而言,hh表示隊(duì)頭,tt表示隊(duì)尾,初始化時(shí)hh=0,tt=-1,如果hh<=tt表示隊(duì)列不空。

何時(shí)刪掉隊(duì)頭元素 ?因?yàn)槊杜e的是右端點(diǎn),受限的就是左端點(diǎn)。當(dāng)q隊(duì)首的值(q中存的是下標(biāo))q[hh]小于當(dāng)前窗口最左邊下標(biāo)的時(shí)候:q[hh]<i-k+1此時(shí)隊(duì)頭元素刪掉,即hh++。

#include<iostream> using namespace std; const int maxn=1e6+10; int a[maxn],q[maxn]; int main(){int n,k;scanf("%d%d",&n,&k);for(int i=0;i<n;i++) scanf("%d",&a[i]);int hh=0,tt=-1;//隊(duì)頭(在左邊)和隊(duì)尾(在右邊)for(int i=0;i<n;i++ ){//區(qū)間終點(diǎn)是i 那么整個(gè)區(qū)間是 [ i-k+1,i]//判斷隊(duì)頭是否劃出窗口,每次查看一次if(hh<=tt&&q[hh]<i-k+1) hh++;//q存的是下標(biāo) while(hh<=tt&&a[q[tt]]>=a[i]) tt--;// 隊(duì)列不空,且新來元素更小,把前面所有冗余(比它大的)都清理掉q[++tt]=i;//把當(dāng)前最小的放進(jìn)來//當(dāng)?shù)谝淮螡M足窗口長(zhǎng)度k時(shí),往后隨著i的遞增,每次都要輸出最小值,因?yàn)榇翱谠谝苿?dòng)if(i>=k-1) printf("%d ",a[q[hh]]);//a【q[]】嚴(yán)格單調(diào)上升的最小值,是隊(duì)頭q[hh]}puts("");//輸出空格return 0;}

同理可找最大值,維護(hù)一個(gè)隊(duì)列單調(diào)遞減,這樣隊(duì)首就是滑動(dòng)窗口中的最大值。

題目鏈接:acwing154滑動(dòng)窗口

ac代碼

#include<iostream> using namespace std; const int maxn=1e6+10; int a[maxn],q[maxn]; int main(){int n,k;scanf("%d%d",&n,&k);for(int i=0;i<n;i++) scanf("%d",&a[i]);//找最小值int tt=-1,hh=0; //隊(duì)頭hh,隊(duì)尾 ttfor(int i=0;i<n;i++){if(hh<=tt&&q[hh]<i-k+1) hh++;while(hh<=tt&&a[q[tt]]>=a[i]) tt--;q[++tt]=i;if(i+1>=k) printf("%d ",a[q[hh]]);}puts("");//找最大值tt=-1,hh=0;for(int i=0;i<n;i++){if(hh<=tt&&q[hh]<i-k+1) hh++;while(hh<=tt&&a[q[tt]]<=a[i]) tt--;//隊(duì)尾元素小于當(dāng)前,全部清空q[++tt]=i;if(i+1>=k) printf("%d ",a[q[hh]]);}puts("");return 0;}

代碼2:deque容器實(shí)現(xiàn)

acwing中的ac代碼

#include<bits/stdc++.h> using namespace std;const int N=1000010; int a[N]; deque<int> q; int main(){int n,k;cin>>n>>k;for(int i=0;i<n;i++)cin>>a[i];for(int i=0;i<n;i++){if(q.size() && q.front()<i-k+1) q.pop_front();while(q.size() && a[q.back()]>=a[i]) q.pop_back();q.push_back(i);if(i>=k-1) cout<<a[q.front()]<<" ";}cout<<endl;q.clear();for(int i=0;i<n;i++){if(q.size()&& q.front()<i-k+1) q.pop_front();while(q.size()&& a[q.back()]<=a[i]) q.pop_back();q.push_back(i);if(i>=k-1) cout<<a[q.front()]<<" ";}}

總結(jié)

以上是生活随笔為你收集整理的单调队列板子:求滑动窗口中最大值和最小值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九九综合视频 | 九九在线| 日本成片网 | 欧美特黄一级大片 | 瑟瑟网站免费 | 一级片在线播放 | 粉嫩av网 | 国产黄a三级三级看三级 | 日韩精品一线二线三线 | 亚洲专区一区二区三区 | 久久h| 久久久一级黄色片 | 精品xxx | 又爽又黄又无遮挡 | 精品97人妻无码中文永久在线 | 1024欧美| 草草网址 | www一起操 | v99av| 欧美性视频一区二区三区 | 久操不卡 | 伊人网视频在线观看 | 成人激情小视频 | 精品一区二区三区毛片 | 亚洲天堂精品一区 | 一区二区三区久久久久 | 在线观看欧美一区二区 | 毛片aaaaaa | 中文字幕校园春色 | 亚洲精品人妻无码 | 黄色在线免费看 | 国产一区二区免费 | 爱爱的网站 | 中文av一区二区三区 | 成人免费在线播放视频 | 日韩伦理一区二区 | 手机看片在线观看 | 免费在线国产视频 | 日韩经典在线观看 | 欧美日韩精品一区二区三区四区 | 一区二区三区国产 | 一区在线免费观看 | 欧美亚洲黄色片 | a视频在线免费观看 | 精品动漫一区 | 欧美xxx在线观看 | 精品人妻伦九区久久aaa片 | 香蕉视频三级 | 国产精品一区二区免费视频 | 中文字幕久久网 | 中文字幕无码毛片免费看 | 朝鲜一级黄色片 | 开心激情综合网 | 又黄又爽视频 | 97自拍偷拍 | 亚洲精品视频网 | 亚洲美女高潮久久久 | 欧美偷拍一区二区 | 波多野结衣在线视频免费观看 | 看黄网站在线观看 | 四虎8848| 日韩大片一区二区 | 日本美女日批视频 | 水多多在线 | 亚洲美女福利视频 | 草草在线观看视频 | 污污污污污污www网站免费 | 国产视频二区三区 | 国产精品国产av | 欧美大片一区二区 | 72成人网 | 污黄视频网站 | 波多野结衣精品 | 黄色在线播放网站 | 亚洲AV午夜福利精品一级无码 | 中文字幕乱码中文乱码777 | 五月婷中文字幕 | 婷婷色激情 | av免费影院 | 国产超碰人人模人人爽人人添 | 国产人妻人伦精品1国产丝袜 | 色亚洲色图 | 国产精品久久久无码一区 | 成人性视频在线 | 超碰男人的天堂 | 美女性生活视频 | 中文字幕在线视频一区二区 | 亚洲成人av一区二区 | 亚洲中文字幕在线观看 | 短篇山村男同肉耽h | 2021av在线| 99久久人妻精品免费二区 | 人人人妻人人澡人人爽欧美一区 | 日韩欧美中文字幕一区 | 性欧美一区 | 好吊一区二区三区视频 | 性生交生活片1 | 欧美日韩国产一区二区三区 | 久久精品www人人爽人人 |