【棧與隊列】滑動窗口最大值

題目:給你一個整數數組?nums,有一個大小為?k?的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的?k?個數字。滑動窗口每次只向右移動一位。

返回?滑動窗口中的最大值?

分析:首先我們可以發現滑動窗口的移動操作和隊列的一進一出很相似,pop隊頭元素,push進隊尾一個元素。所以我們可以使用隊列來實現此題所需要的功能。但是題目要求返回滑動窗口的最大值,我們應該怎么做呢?大家一般第一想法就是對元素進行排序,但是排序之后我們還需要移動滑動窗口,即需要pop隊頭,那我們就無法pop正常需要pop的元素,每次pop的都是最大值,因此不能使用排序或者優先級隊列。我們可以自己設計需要的隊列讓它能夠找到最大值并且可以正確進行移動。

如何找到最大值,需要我們在push函數上進行設計。我們把最大值始終放在隊頭,把比它小的元素都pop掉。注意這里需要從back比較,并從back 進行pop,否則邏輯錯誤。

在pop函數設計時,由于我們有可能在push函數調用時已經pop了一些較小的元素,所以我們需要判斷要pop的元素是否和隊頭元素相等,若相等則pop,否則說明在在push函數調用時就已經pop了,那么就不需要執行任何操作。

具體代碼:

class Solution {
private:class Myqueue {public:deque<int> que;void pop(int value) {if(!que.empty() && value == que.front()) {que.pop_front();}}void push(int value) {while(!que.empty() && value > que.back()) {que.pop_back();}que.push_back(value);}int front() {return que.front();}};
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {Myqueue que;vector<int> result;for(int i = 0; i < k; i++) {que.push(nums[i]);}result.push_back(que.front());for(int i = k; i < nums.size(); i++) {que.pop(nums[i - k]);que.push(nums[i]);result.push_back(que.front());}return result;}
};

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

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

相關文章

揭秘教學新利器:SmartEDA電路仿真軟件,讓電子學習更生動!

在數字化教育浪潮中&#xff0c;一款名為SmartEDA的電路仿真軟件逐漸嶄露頭角&#xff0c;以其直觀、易操作的特點&#xff0c;為電子學習領域帶來了革命性的變化。今天&#xff0c;就讓我們一起探討如何使用SmartEDA進行教學&#xff0c;讓電子學習變得更加生動有趣&#xff0…

使用Python實現深度學習模型:強化學習與深度Q網絡(DQN)

深度Q網絡(Deep Q-Network,DQN)是結合深度學習與強化學習的一種方法,用于解決復雜的決策問題。本文將詳細介紹如何使用Python實現DQN,主要包括以下幾個方面: 強化學習簡介DQN算法簡介環境搭建DQN模型實現模型訓練與評估1. 強化學習簡介 強化學習是一種訓練智能體(agent…

Android源碼——Handler機制(一)

Android源碼——Handler機制&#xff08;一&#xff09; Handler機制概述介紹Handler機制模型Handler機制架構 Handler機制源碼解析ActivityThreadLooperHandler Handler機制概述 介紹 Handler是Android消息機制的上層接口。Handler可以將一個任務切換到Handler所在的線程中去…

趕緊收藏!2024 年最常見的操作系統面試題(八)

上一篇地址&#xff1a;趕緊收藏&#xff01;2024 年最常見的操作系統面試題&#xff08;七&#xff09;-CSDN博客 十五、什么是進程同步&#xff1f;請舉例說明幾種進程同步的方法。 進程同步是操作系統中用于控制多個進程或線程對共享資源的訪問的一種機制。它確保在任何給…

網絡物理隔離后 可以用保密U盤進行數據安全交換嗎?

企業用的保密U盤通常被設計用于存儲和傳輸敏感信息&#xff0c;以確保數據的安全和保密性。 在網絡之間實現了物理隔離后&#xff0c;使用保密U盤進行數據安全交換是一種常見的做法。物理隔離確保了兩個網絡之間的完全分離&#xff0c;因此使用保密U盤可以作為一種安全的手段來…

android view 設置過 transalationY/X 后 marginTop/marginStart/Left 不變

在 Android 開發中&#xff0c;當你對一個視圖(View)設置了 translationY 屬性后&#xff0c;這個視圖的 marginTop 屬性實際上并不會改變。這是因為 translationY 只會影響視圖的繪制位置&#xff0c;而不會改變視圖的布局參數。換句話說&#xff0c;translationY 是一個運行時…

第1章 物聯網模式簡介---物聯網概述

物聯網模式簡介 物聯網&#xff08;IoT&#xff09;在最近幾年獲得了巨大的吸引力&#xff0c;該領域在未來幾年將呈指數級增長。這一增長將跨越所有主要領域/垂直行業&#xff0c;包括消費者、家庭、制造業、健康、旅游和運輸。這本書將為那些想了解基本物聯網模式以及如何混…

UNIAPP_在js文件中使用i18n國際化

導入 import { initVueI18n } from dcloudio/uni-i18n import messages from /locale/index const { t } initVueI18n(messages) 使用 t(config.request.i001).

【大模型】大模型微調方法總結(四)

1. P-Tuning v1 1.背景 大模型的Prompt構造方式嚴重影響下游任務的效果。比如&#xff1a;GPT-3采用人工構造的模版來做上下文學習&#xff08;in context learning&#xff09;&#xff0c;但人工設計的模版的變化特別敏感&#xff0c;加一個詞或者少一個詞&#xff0c;或者變…

MySQL存儲引擎 INNODB和MYISAM

存儲引擎概述 什么是存儲引擎 是數據庫底層軟件組件&#xff0c;數據庫管理系統使用數據索引進行創建、查詢、更新和刪除數據操作。不同的存儲引擎提供不同的存儲機制、索引技巧】鎖定水平等功能&#xff0c;使用不同的存儲引擎可以獲得特定的功能 MySQL5.7支持的存儲引擎 …

大數據面試之Hadoop

目錄 介紹下Hadoop Hadoop的特點 說下Hadoop生態圈組件及其作用 Hadoop主要分哪幾個部分?他們有什么作用? Hadoop 1.x&#xff0c;2x&#xff0c;3.x的區別 Hadoop集群工作時啟動哪些進程?它們有什么作用? 在集群計算的時候&#xff0c;什么是集群的主要瓶頸 搭建Ha…

用英文介紹美國總統Trump: Donald J. Trump Twice Impeached (2017 – 2021)

Donald J. Trump: Twice Impeached (2017 – 2021) Link: https://www.youtube.com/watch?vJ7RC2DKf6rs&listPLybg94GvOJ9E-ZM1U6PAjgPUmz-V4-Yja&index45 Summary Summary of Donald Trump’s Rise and Presidency Donald John Trump, originally from Queens, Ne…

網頁中如何接入高德地圖【靜態地圖篇】

接入高德地圖 登錄高德開放平臺創建應用添加key創建靜態地圖文檔說明markers 網頁應用總結 登錄高德開放平臺 高德開放平臺 創建應用 點擊我的應用 -> 創建應用 添加key 調相關接口都需要用到這個key&#xff01; 創建靜態地圖 靜態地圖API文檔 文檔說明 服務地址…

基于上一篇博客,用阻塞隊列實現異步下單

在上一篇博客中&#xff0c;我們介紹了如何利用 Redis 和 Lua 腳本來高效處理秒殺活動中的高并發請求&#xff0c;保證用戶體驗。本文將進一步優化秒殺系統&#xff0c;通過引入阻塞隊列實現異步下單&#xff0c;從而提高系統的整體性能和穩定性。 引言 秒殺活動往往伴隨著極…

ArmSoM-Sige7/5/1 和樹莓派5規格比較

引言 在當今快速發展的嵌入式系統領域&#xff0c;選擇一款性能強大、功能豐富的開發板對于項目的成功至關重要。本文將介紹并比較 Sige7、Sige5、Raspberry Pi 5 和 Sige1 這四款開發板的關鍵規格和特性&#xff0c;幫助開發者和愛好者選擇最適合其需求的平臺。 ArmSoM-Sige…

使用模板方法設計模式封裝 socket 套接字并實現Tcp服務器和客戶端 簡單工廠模式設計

文章目錄 使用模板方法設計模式封裝套接字使用封裝后的套接字實現Tcp服務器和客戶端實現Tcp服務器實現Tcp客戶端 工廠模式 使用模板方法設計模式封裝套接字 可以使用模塊方法設計模式來設計套接字 socket 的封裝 模板方法&#xff08;Template Method&#xff09;設計模式是一…

【深度學習】深度學習基礎

李宏毅深度學習筆記 局部極小值與鞍點 鞍點其實就是梯度是零且區別于局部極小值和局部極大值的點。 鞍點的叫法是因為其形狀像馬鞍。鞍點的梯度為零&#xff0c;但它不是局部極小值。我們把梯度為零的點統稱為臨界點&#xff08;critical point&#xff09;。損失沒有辦法再下…

使用Flink CDC實現 Oracle數據庫數據同步(非SQL)

文章目錄 前言一、開啟歸檔日志二、創建flinkcdc專屬用戶2.1 對于Oracle 非CDB數據庫&#xff0c;執行如下sql2.2 對于Oracle CDB數據庫&#xff0c;執行如下sql 三、指定oracle表、庫級啟用四、使用flink-connector-oracle-cdc實現數據庫同步4.1 引入pom依賴4.1 Java主代碼4.1…

Docker Desktop 簡易操作指南 (Windows, macOS, Linux)

1. 下載最新版本 Docker Desktop https://www.docker.com/products/docker-desktop/ 2.啟動 Docker Desktop 3.常用命令&#xff08;在 cmd 或 Terminal 中執行&#xff09; #列出所有鏡像&#xff08;Images&#xff09; docker images #列出所有容器&#xff08;Containers&…

OpenSSL/3.3.0: error:0A00018A:SSL routines::dh key too small

php curl解決辦法: curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, ‘DEFAULTSECLEVEL1’); python 解決辦法: from twisted.internet.ssl import AcceptableCiphers from scrapy.core.downloader import contextfactory contextfactory.DEFAULT_CIPHERS AcceptableCiphers.from…