滑動窗口最大值-力扣

在做這道題時,首先想到的解法是使用隊列來做,維護一個隊列,每次保存滑動窗口大小的長度,并判斷此時隊列中的最大值,但這樣做,在k的值較大時,出現了超時問題,代碼如下:

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> result;queue<int> que;for(int i = 0; i < nums.size(); i++){que.push(nums[i]);while(que.size() == k){int maxNum = que.front();que.pop();que.push(maxNum);for(int flag = 0; flag < k - 1; flag++){int tmp = que.front();maxNum = max(maxNum, tmp);que.pop();que.push(tmp);}result.push_back(maxNum);que.pop();}}return result;}
};

使用deque雙端隊列來完成這道題,首先遍歷前k個元素,將最大值的下標加入到隊列中,如果新加入的下標對應的值大于隊列前面下標對應的值,將其移除。這樣保持這個隊列維護的下標,對應的值時由大到小單調的。
之后每新插一個元素進來,繼續維護這個單調的隊列,然后判斷隊列最前的下標,是否還在滑動窗口內,如果不在,則移除。代碼如下:

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

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

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

相關文章

STM32-15-DMA

STM32-01-認識單片機 STM32-02-基礎知識 STM32-03-HAL庫 STM32-04-時鐘樹 STM32-05-SYSTEM文件夾 STM32-06-GPIO STM32-07-外部中斷 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定時器 STM32-11-電容觸摸按鍵 STM32-12-OLED模塊 STM32-13-MPU STM32-14-FSMC_LCD 文章目錄 STM…

[原創][Delphi多線程]TThreadedQueue的經典使用案例.

[簡介] 常用網名: 豬頭三 出生日期: 1981.XX.XX QQ: 643439947 個人網站: 80x86匯編小站 https://www.x86asm.org 編程生涯: 2001年~至今[共22年] 職業生涯: 20年 開發語言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 開發工具: Visual Studio、Delph…

悉數六大設計原則

悉數六大設計原則 目錄 悉數六大設計原則前言?誰發明了設計模式設計原則設計原則與設計模式的關系 單一職責什么是單一職責不遵循單一職責原則的設計遵循單一職責原則的設計單一職責的優點示例代碼&#xff1a; 里氏替換原則什么是里氏替換原則示例代碼&#xff1a;違反里氏替…

解讀信創產業根基,操作系統發展歷程

信創產業根基之一操作系統 操作系統是一個關鍵的控制程序&#xff0c;負責協調、管理和控制計算機硬件和軟件資源。作為硬件的首要軟件擴展&#xff0c;它位于裸機與用戶之間&#xff0c;充當了兩者之間的橋梁。通過其核心程序&#xff0c;操作系統高效地管理著系統中的各類資源…

static修飾變量和函數

static修飾的變量和函數只能在定義它的cpp源文件中使用&#xff0c;如果在頭文件中定義&#xff0c;則需要注意 在頭文件中定義static變量和static函數&#xff1a; 變量 如果在頭文件中定義了static變量&#xff0c;那么&#xff0c;所有包含這個頭文件的源文件都會定義自己…

vm-bhyve虛擬機安裝ubuntu22版本后進入grub無法啟動

問題&#xff1a;安裝ubuntu22版本后無法啟動 安裝好ubuntu22之后&#xff0c;重啟進入了grub模式&#xff0c;沒有自動啟動ubuntu 網上查了一下&#xff0c;這算一個通病。 問題解決 在grub模式下輸入boot命令&#xff1a; boot (lvm/ubuntu--vg-ubuntu--lv)/boot error: …

有哪些兼職軟件一天能賺幾十元?盤點十個能長期做下去的掙錢軟件

在當今這個信息泛濫的時代&#xff0c;眾人紛紛尋求迅速致富的捷徑。許多人在從事兼職或副業時&#xff0c;并不期望取得巨大的成就&#xff0c;只要每天能額外收入數十元&#xff0c;便已心滿意足。 今天&#xff0c;我將帶領大家深入探究&#xff0c;揭開那些隱藏在日常生活…

【小海實習日記】Git使用規范

1.Git使用流程 1.1 從master分支拉一個分支&#xff0c;命名要符合規范且清晰。 1.2 commit到本地&#xff0c;push 到遠端。 1.3 在Gitlab創建MR&#xff0c;選擇develp分支。 1.4 如果要修改的話&#xff0c;先把Gitlab上的MR修改為Draft(修改態)&#xff0c;然后在本地修改代…

Dubbo中的Invoker與Exporter機制詳解

Dubbo作為一款成熟的高性能、輕量級的Java RPC框架&#xff0c;其核心機制之一便是Invoker與Exporter機制&#xff0c;它們在服務提供端和服務消費端扮演著至關重要的角色&#xff0c;是實現服務調用和管理的基礎。下面將詳細解析這兩個核心組件的工作原理及其在Dubbo框架中的作…

9.1.1 簡述目標檢測領域中的單階段模型和兩階段模型的性能差異及其原因

9.1目標檢測 場景描述 目標檢測&#xff08;Object Detection&#xff09;任務是計算機視覺中極為重要的基礎問題&#xff0c;也是解決實例分割&#xff08;Instance Segmentation&#xff09;、場景理解&#xff08;Scene Understanding&#xff09;、目標跟蹤&#xff08;Ob…

詳解 Spark SQL 代碼開發之用戶自定義函數

一、UDF 一進一出函數 /**語法&#xff1a;SparkSession.udf.register(func_name: String, op: T > K) */ object TestSparkSqlUdf {def main(args: Array[String]): Unit {// 創建 sparksql 環境對象val conf new SparkConf().setMaster("local[*]").setAppNam…

subline text3安裝numpy,scipy,matplotlib,pandas,sklearn,ipynb

1&#xff0c;numpy&#xff08;基礎數值算法&#xff09; 安裝&#xff0c;要是在cmd直接安裝到最后會報錯, import numpy as np ModuleNotFoundError: No module named numpy 直接進入python環境&#xff0c;輸入python -m pip install numpy就不會報錯…

【SringBoot項目中MyBatis-Plus多數據源應用實踐】

文章目錄 前言 一、Mybatis-Plus是什么&#xff1f; 二、多數據源是什么&#xff1f; 三、使用步驟 1. 新建一個SpringBoot項目 2. 引入必要的MyBatis架包 3. 新建兩個數據庫及兩張表 3.3.1 新建數據庫&#xff1a;DB_A&#xff0c;并創建一張數據表alarm_kind&#xff0c;以及…

云端數據提取:安全、高效地利用無限資源

在當今的大數據時代&#xff0c;企業和組織越來越依賴于云平臺存儲和處理海量數據。然而&#xff0c;隨著數據的指數級增長&#xff0c;數據的安全性和高效的數據處理成為了企業最為關心的議題之一。本文將探討云端數據安全的重要性&#xff0c;并提出一套既高效又安全的數據提…

淺測 長亭雷池 WAF “動態防護”

本文首發于 Anyeの小站 前言 雷池 WAF 社區版的更新速度是真快啊&#xff0c;幾乎一周一個小版本&#xff0c;倆月一個大版本&#xff0c;攻城獅們真的狠啊&#xff0c;沒法測了。 廢話不多說&#xff0c;前兩天看到了 這篇文章&#xff0c;對雷池的“動態防護”功能挺感興趣…

Android應用的基本構造及威脅(apk)

目錄 APK文件是什么 apk文件解壓后的目錄結構 apk文件的存儲位置

去掉el-table表頭右側類名是gutter,width=17px的空白區域(包括表頭樣式及表格奇偶行樣式和表格自動滾動)

代碼如下&#xff1a; <el-table:data"tableData"ref"scroll_Table":header-cell-style"getRowClass":cell-style"styleBack"height"350px"style"width: 100%"><el-table-column prop"id" l…

Scrum團隊在迭代中如何處理計劃外的工作

認為 Scrum 團隊不做計劃其實是一個誤區&#xff0c;實際上很多 Scrum 團隊在沖刺計劃會議以及在細化工作項時均會進行詳細規劃。此外&#xff0c;他們還會創建一個路線圖&#xff0c;以便顯示他們在多個沖刺中的計劃。 Scrum 團隊需要經常進行計劃&#xff0c;以便在不斷變化…

linux學習:進程

目錄 例子1 獲取當前進程的進程標識符 例子2 創建一個新的子進程 例子3 展示了父進程和子進程的進程標識符 例子4 區分父進程和子進程 例子5 區分父進程和子進程的行為 例子6 比較進程標識符來區分父進程和子進程 例子7 子進程如何修改一個變量&…

混合動力電動汽車介紹(二)

接續前一章內容&#xff0c;本篇文章介紹混合動力汽車串聯、并聯和混聯的系統組成和工作原理。 一、串聯混合動力電動汽車的系統組成和工作原理 上圖為串聯混合動力電動汽車的結構簡圖。汽車由電動機-發電機驅動行駛&#xff0c;電機控制器的動力來自油箱-發動機-發電機-發電機…