【劍指offer】_19 滑動窗口中的最大值

題目描述

給定一個數組和滑動窗口的大小,找出所有滑動窗口里數值的最大值。例如,如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3,那么一共存在6個滑動窗口,他們的最大值分別為{4,4,6,6,6,5}; 針對數組{2,3,4,2,6,2,5,1}的滑動窗口有以下6個: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。

解題思路

  1. 方案一:蠻力法,順序分塊掃描。例如在上例中,我們進行不斷的分組和查找,3個一組,這樣最終會找出其最大值。但是其時間復雜度為O(NK)。N為滑動窗口的數量,K為滑動窗口的大小。
  2. 方案二:雙端隊列實現。由于方案二中實現的步驟比較復雜,所以我們換了一種思路,在取得最大值的過程中,我們并不把每個數值都存入隊列,而只是把有可能成為最大值的數據存入到兩端開口的隊列(deque)中,上面的輸入為例,其求解過程如下:

在這里插入圖片描述

代碼實現

class Solution {vector<int> res;deque<int> q;
public:vector<int> maxInWindows(const vector<int>& num, unsigned int size){if(num.size()>=size && size >= 1)  //保證參數合理性{//取一個窗口中的最大值的下標for(int i=0;i<size;++i){if(!q.empty() && num[q.back()]<=num[i])q.pop_back();q.push_back(i);}//處理后面for(int i = size;i<num.size();++i){//每回將一個窗口中的最大值壓入結果集合//最大值永遠是以隊列頭元素為下標的值res.push_back(num[q.front()]);//如果后面元素大小有比以隊列中任何一個元素為下標的元素大的話//把隊列清空while(!q.empty() && num[q.back()] <= num[i])q.pop_back();//如果后面的元素沒有比當前最大元素大,但是窗口已經滿了,滑過了最大元素的下標if(!q.empty() && q.front() <= i-size)q.pop_front();q.push_back(i);}//最后一次循環結束,i到頭,最后一個窗口中的最大值就是//以隊列中頭元素為下標的值res.push_back(num[q.front()]);}return res;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383084.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 文字反轉_多文字共享信息系統

歐陽貴林 www.HeZi.net首發表于2016年03月23日“ 處在信息時代的開端&#xff0c;信息技術不應有特殊的文字性&#xff0c;需要創建多文字共享信息系統&#xff0c;給各國文字一個公平的參與信息與科技創新發展的平臺。這是世界的事&#xff0c;更是中國事。”01人類語言語言文…

LeetCode【1--兩數之和】 LeetCode【2--兩數相加】

兩數之和 題目描述 給定一個整數數組 nums 和一個目標值 target&#xff0c;請你在該數組中找出和為目標值的那 兩個 整數&#xff0c;并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;你不能重復利用這個數組中同樣的元素。 解題思路 直接兩…

input數字開頭不能為0_李商隱為初戀寫詩,每句以數字開頭,最后10字一直被仿從未被超越...

上學時&#xff0c;每次寫作文&#xff0c;老師總愛在耳邊念叨&#xff1a;“你的作文得讓閱卷老師看得懂&#xff0c;不然不可能給你高分的&#xff01;”每次聽到話&#xff0c;筆者總是用李商隱的詩來和他斗嘴。是的&#xff0c;李商隱的詩作常常是讓人讀不懂的&#xff0c;…

lsass.exe 當試圖更新密碼時_“驅動人生”下載器木馬再度更新-你應該注意什么?...

360安全大腦監測到通過"驅動人生"供應鏈攻擊傳播的挖礦木馬在1月30日下午4時左右再次更新。此次更新中&#xff0c;木馬在此前抓取系統帳戶密碼的基礎上增加了抓取密碼hash值的功能&#xff0c;并試圖通過pass the hash攻擊進行橫向滲透&#xff0c;使得該木馬的傳播…

LeetCode【3--無重復的最長字串】 LeetCode【4--有序數組中的中位數】

無重復的最長字串 題目描述 給定一個字符串&#xff0c;請你找出其中不含有重復字符的 最長子串 的長度。 解題思路 看到這道題&#xff0c;其實就兩個步驟&#xff0c;遍歷字符串&#xff0c;記錄當前字符有沒有重復。 重復一般解決就是哈希&#xff0c;這里用個數組表示…

hwt字體轉換ttf_五分鐘教你弄懂了字體反爬是個啥

今天的文章內容主要是關于字體反爬。目前已知的幾個字體反爬的網站是貓眼&#xff0c;汽車之家&#xff0c;天眼查&#xff0c;起點中文網等等。以前也看過這方面的文章&#xff0c;今天跟個老哥在交流的時候&#xff0c;終于實操了一把&#xff0c;弄懂了字體反爬是個啥玩意。…

LeetCode【5--最長的回文子串】 LeetCode【6--Z字形變換】

最長的回文子串 題目描述 給定一個字符串 s&#xff0c;找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。 解題思路 可以跟無重復的最長子串一樣&#xff0c;用一個滑動窗口&#xff0c;只不過這個窗口的右邊界往右&#xff0c;左邊界每回要從右邊界的下標往左…

androidstudio 日歷視圖怎么顯示農歷_中秋國慶旅游攻略怎么做?用這個便簽軟件很簡單...

九月已經到來&#xff0c;中秋節和國慶節距離我們也不遠了&#xff0c;今年的中秋和國慶節重疊了有足足八天的假期。不少人都想趁著這個小長假出門旅游&#xff0c;要想保證旅游質量&#xff0c;那么就要做好攻略。中秋國慶旅游攻略怎么做&#xff1f;要想做好一份中秋國慶旅游…

c++ select函數_PySpark 操作函數一覽

PySpark 操作函數一覽Created: Sep 14, 2020 10:28 AM Tags: Big Data, PySpark, Python, SparkPyspark.sql.functionsfrom pyspark.sql import functions as F函數使用說明基本數學函數類abssin、cos、tan、asin、acos 、atan、sinh、cosh、tanhceil、round、floorexp、log、l…

LeetCode【7--整數反轉】 LeetCode【8--字符串轉整數】

整數反轉 題目描述 給出一個 32 位的有符號整數&#xff0c;你需要將這個整數中每位上的數字進行反轉。 解題思路 x%10 取一位&#xff0c;x/10下一位&#xff0c;注意越界&#xff0c; 代碼實現 class Solution { public:int reverse(int x) {int sum 0;while(x){if(s…

word2003如何設置護眼模式_ERP系統上線,如何設置采購收貨的模式,提升企業的采購效率...

如何合理的規劃采購計劃上次去拜訪一個朋友&#xff0c;他們說公司既然出現沒有下達采購訂單&#xff0c;供應商也有送貨過來的事情&#xff0c;對于公司來說&#xff0c;這個是非常嚴重的問題。若用了ERP系統之后&#xff0c;如何避免類似的事情發生&#xff0c;今天我們來分享…

LeetCode【9-- 回文數】LeetCode【10 --正則表達式的匹配】

回文數 題目描述 判斷一個整數是否是回文數。回文數是指正序&#xff08;從左向右&#xff09;和倒序&#xff08;從右向左&#xff09;讀都是一樣的整數。 解題思路 判斷該數的逆序數是不是和原數相同 代碼實現 class Solution { public:bool isPalindrome(int x) {if(…

sun鍵盤沒有stop鍵_請教Sun鍵盤

請教Sun鍵盤(2011-12-24 06:01:11)標簽&#xff1a;計算機雜談請教Sun鍵盤Sun鍵盤上,Help和F1之間的空白鍵是干啥的?Space旁邊的兩個菱形標志的呢?Compose呢?謝謝!請教Sun鍵盤Space旁邊的兩個菱形標志是一個類似Ctrl、Alt的修飾鍵&#xff0c;叫Meta。可以用Meta;鍵名來定義…

LeetCode【11--盛水最多的容器】LeetCode【12 -- 整數轉羅馬數字】

盛水最多的容器 題目描述 給定 n 個非負整數 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線&#xff0c;垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線&#xff0c;使得它們與 x 軸共…

LeetCode【13--羅馬數字轉整數】LeetCode【14--最長的公共前綴】

羅馬數字轉整數 題目描述 羅馬數字包含以下七種字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 例如&#xff0c; 羅馬數字 2 寫做 II &#xff0c;即為兩個并列的 1。12 寫做 XII &#xff0c;即為 X II 。 27 寫做 XXVII, 即為 XX…

linux 編譯3g驅動_linux下使用3G撥號上網 以及3g驅動設置

中興WCDMA模塊 Linux撥號流程Version 1.0目錄1. 測試準備……………………………………………………..…32. 撥號腳本………………………………………………………133. 撥號過程………………………………………………………161. 測試準備本文檔測試模塊&#xff1a;MF210(中興W…

文件壓縮(基于LZ77的壓縮)

LZ77壓縮原理 初始LZ77 LZ77是基于字節的通用壓縮算法&#xff0c;它的原理就是將源文件中的重復字節(即在前文中出現的重復字節)使用(offset&#xff0c;length&#xff0c;nextchar)的三元組進行替換 這里的 長度–offset&#xff0c;距離—length&#xff0c;先行緩沖匹配…

好中的圖像處理方面的期刊_約會中,注意這四個方面,幫助你把握好自己的真愛...

兩個人想要擁有一段美好的感情&#xff0c;那么男生就要掌握好一些技巧去追求對方&#xff0c;在追求的過程中&#xff0c;兩個人的約會也非常重要&#xff0c;畢竟只有約會過程中&#xff0c;女孩子才能夠看到你光鮮亮麗的一面&#xff0c;才能夠慢慢的接受你&#xff0c;如果…

kafka consumer配置拉取速度慢_Kafka消費者的使用和原理

這周我們學習下消費者&#xff0c;仍然還是先從一個消費者的Hello World學起&#xff1a;public class Consumer { public static void main(String[] args) { // 1. 配置參數 Properties properties new Properties(); properties.put("key.des…

前綴和

前綴和 輸入一個長度為n的整數序列。 接下來再輸入m個詢問&#xff0c;每個詢問輸入一對l, r。 對于每個詢問&#xff0c;輸出原序列中從第l個數到第r個數的和。 輸入格式 第一行包含兩個整數n和m。 第二行包含n個整數&#xff0c;表示整數數列。 接下來m行&#xff0c;…