力扣hot100——239.滑動窗口最大值

題目鏈接: 239. 滑動窗口最大值 - 力扣(LeetCode)

優先級隊列

優先級隊列自動按照大小排序,隊首即為最大元素,但取隊首時要注意元素是否在滑動窗口內,如果不在則彈出。

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {priority_queue<pair<int,int>> q;//(元素值,元素索引)//在第一個滑動窗口找最大元素for(int i=0;i<k;i++){q.emplace(nums[i],i);}vector<int> res={q.top().first};//移動窗口for(int i=k;i<nums.size();i++){q.emplace(nums[i],i);//移除不在窗口范圍內的元素while(q.top().second<=i-k){q.pop();}res.push_back(q.top().first);}return res;}
};
  • 時間復雜度:O(nlogn) 每個元素都被插入和刪除一次
  • 空間復雜度:O(n)

單調隊列

同一個窗口內,如果右側元素大于左側元素,那么左側元素不必考慮,因為此時窗口內的最大元素一定不是左側元素,并且當窗口向右移動時左側元素可能不在窗口中,因此永久移除這樣的左側元素。

vector<int> maxSlidingWindow(vector<int>& nums, int k) {deque<int> q;for(int i=0;i<k;i++){while(!q.empty()&&nums[i]>=nums[q.back()]){q.pop_back();//移除小于右側元素的值}q.push_back(i);}vector<int> ans={nums[q.front()]};for(int i=k;i<nums.size();i++){//移除小于右側元素的值while(!q.empty()&&nums[i]>=nums[q.back()]){q.pop_back();}q.push_back(i);//移除不在窗口范圍內的元素while(q.front()<=i-k){q.pop_front();}ans.push_back(nums[q.front()]);}return ans;}
  • 時間復雜度:O(n) 遍歷整個數組
  • 空間復雜度:O(k)

引用評論區的兩句話來加深對單調隊列的理解:

我悟了,隊尾只要有更年輕(i越靠后)同時還能力更強(數值越大)的,留著其他比它更早入職同時能力卻更差的沒有什么意義,統統開了;隊首的雖然能力最強,但是年齡最大,一旦發現它超過年齡范圍(不在滑動窗口的范圍內),不用看能力就可以直接開了。
我悟了, 隊尾比不過同齡人的刪掉,隊頭超出時代區間的刪掉,歷史就是這么不斷更迭的。

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

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

相關文章

Alibaba國際站商品詳情AP接口概述,json數據示例返回參考

前言 Alibaba國際站商品詳情API&#xff08;通常稱為item_get接口&#xff09;是阿里巴巴開放平臺提供的一項核心服務&#xff0c;允許開發者通過商品ID獲取商品的詳細信息。該接口廣泛應用于電商系統集成、數據分析、競品監控等場景&#xff0c;支持企業自動化獲取商品標題、…

[論文閱讀]Adversarial Semantic Collisions

Adversarial Semantic Collisions Adversarial Semantic Collisions - ACL Anthology Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP) 對抗樣本是相似的輸入但是產生不同的模型輸出&#xff0c;而語義沖突是對抗樣本的逆…

25【干貨】在Arcgis中根據字段屬性重新排序并自動編號的方法(二)

上一篇關于屬性表自動編號的文章因為涉及到代碼&#xff08;【干貨】在Arcgis中根據字段屬性重新排序并自動編號的方法&#xff08;一&#xff09;&#xff09;&#xff0c;擔心大家有些東西確實不熟悉&#xff0c;今天就更新一篇不需要代碼也能達到這個目的的方法。主要的思路…

從后端研發角度出發,使用k8s部署業務系統

k8s&#xff0c;作為目前最流行的容器編排中間件&#xff0c;大家應該都聽說過&#xff0c;很多公司也都在用&#xff0c;但基本都是運維在管理k8s&#xff0c;開發人員一般涉及不到&#xff0c;開發人員只需要寫業務代碼&#xff0c;然后運維人員負責制作鏡像&#xff0c;然后…

Vue3 Echarts 3D圓柱體柱狀圖實現教程以及封裝一個可復用的組件

文章目錄 前言一、實現原理二、series ——type: "pictorialBar" 簡介2.1 常用屬性 三、代碼實戰3.1 封裝一個echarts通用組件 echarts.vue3.2 首先實現一個基礎柱狀圖3.3 添加上下2個橢圓面3.4 進階封裝一個可復用的3D圓形柱狀圖組件 總結 前言 在前端開發的數據可視…

WPF 上位機開發模板

WPF 上位機開發模板 WPF上位機開發模板,集成了基礎操作菜單、海康視覺實時圖像界面、串口通訊、網口通訊、主流PLC通訊、數據存儲、圖片存儲、參數配置、權限管理、第三方webapi接口接入、數據追溯與查詢等功能。 一、項目結構 WpfSupervisor/ ├── Models/ …

瀏覽器插件,提示:此擴展程序未遵循 Chrome 擴展程序的最佳實踐,因此已無法再使用

1、發現的問題如下&#xff1a; 如果你是比較新的 Chrome 135.0.7049.42&#xff08;含&#xff09;以上版本的話&#xff0c;可以通過修改 chorme://flags 來徹底解決。 2、在瀏覽器分別輸入兩個地址&#xff1a; chrome://flags/#extension-manifest-v2-deprecation-disable…

【原創】從s3桶將對象導入ES建立索引,以便快速查找文件

總體功能&#xff1a; 這段程序的作用是&#xff1a; 從指定的S3桶中讀取所有對象的元數據&#xff08;文件名、大小、最后修改時間、存儲類型、ETag等&#xff09;&#xff0c;并把這些信息寫入到Elasticsearch&#xff08;ES&#xff09;中&#xff0c;建立索引&#xff0c…

git 查看用戶信息

在 Git 中查看用戶信息是一項常見的任務&#xff0c;可以幫助你確認當前倉庫的配置或全局的 Git 配置是否正確設置。你可以通過多種方式來查看這些信息。 查看全局用戶信息 全局用戶信息是應用于所有 Git 倉庫的默認設置。要查看全局用戶信息&#xff0c;可以使用以下命令&am…

制作JDK17 arm64基礎鏡像,解決字體安裝問題

1、下載jdk17 arm64的安裝包 官網下載地址 2、編寫Dockerfile 圖形驗證碼生成需要使用到相關字體&#xff0c;所以基礎鏡像把字體相關也安裝上。 # 基礎鏡像 FROM arm64v8/centos:8.4.2105MAINTAINER hqh# 換源 RUN sed -i s|^mirrorlist|#mirrorlist|g /etc/yum.repos.d/…

人工智能數學基礎(三):微積分初步

微積分作為數學的重要分支&#xff0c;為人工智能的發展提供了堅實的理論基礎。從理解數據的變化趨勢到優化模型參數&#xff0c;微積分的應用貫穿其中。本文將深入探討微積分的核心概念&#xff0c;并結合 Python 編程實例&#xff0c;助力大家輕松掌握這些關鍵知識點。資源綁…

區塊鏈密碼學核心

文章目錄 概要1. 基礎密碼學哈希函數&#xff08;Hash Function&#xff09;對稱加密與非對稱加密數字簽名&#xff08;Digital Signature&#xff09;密鑰管理 2. 區塊鏈專用密碼學技術零知識證明&#xff08;Zero-Knowledge Proof, ZKP&#xff09;同態加密&#xff08;Homom…

Java后端開發day39--方法引用

&#xff08;以下內容全部來自上述課程&#xff09; 1.1 含義 把已經有的方法拿過來用&#xff0c;當作函數式接口中抽象方法的方法體。 已經有的方法&#xff1a;可以是Java自己寫的&#xff0c;也可以是第三方的。 示例語句&#xff1a; &#xff1a;&#xff1a;是方法引…

目前市面上知名的數據采集器

程序員愛自己動手打造一切&#xff0c;但這樣離錢就會比較遠。 市面上知名的數據采集工具 數據采集工具&#xff08;也稱為網絡爬蟲或數據抓取工具&#xff09;在市場上有很多選擇&#xff0c;以下是目前比較知名和廣泛使用的工具分類介紹&#xff1a; 一、開源免費工具 Scra…

TP5兼容達夢國產數據庫

1.首先數據庫安裝&#xff0c;部署時需配置大小寫不敏感 2.安裝PHP達夢擴展&#xff0c;一定要是對應版本&#xff08;兼容操作系統&#xff09;的擴展&#xff0c;否則會出現各種報錯。參考官方文檔&#xff1a;https://eco.dameng.com/document/dm/zh-cn/app-dev/php_php_new…

《解鎖圖像“高清密碼”:超分辨率重建之路》

在圖像的世界里&#xff0c;高分辨率意味著更多細節、更清晰的畫面&#xff0c;就像用高清望遠鏡眺望遠方&#xff0c;一切都纖毫畢現。可現實中&#xff0c;我們常被低分辨率圖像困擾&#xff0c;模糊的監控畫面、老舊照片里難以辨認的面容……不過別擔心&#xff0c;圖像超分…

整合 CountVectorizer 和 TfidfVectorizer 繪制詞云圖

本文分別整合 CountVectorizer 和 TfidfVectorizer 繪制詞云圖 ? CountVectorizer CountVectorizer 是 scikit-learn 中用于 文本特征提取 的一個工具&#xff0c;它的主要作用是將一組文本&#xff08;文本集合&#xff09;轉換為詞頻向量&#xff08;Bag-of-Words&#xf…

Linux 用戶管理

用戶管理是 Linux 系統管理中的重要組成部分&#xff0c;它涉及到用戶和用戶組的創建、刪除、修改以及權限分配等操作。以下是關于用戶和用戶組管理的詳細說明&#xff1a; 一、用戶和用戶組的概念 &#xff08;一&#xff09;用戶&#xff08;User&#xff09; 用戶是系統中…

【HTTP/2和HTTP/3的應用現狀:看不見的革命】

HTTP/2和HTTP/3的應用現狀&#xff1a;看不見的革命 實際上&#xff0c;HTTP/2和HTTP/3已經被眾多著名網站廣泛采用&#xff0c;只是這場革命對普通用戶來說是"無形"的。讓我們揭開這個技術變革的真相。 著名網站的HTTP/2和HTTP/3采用情況 #mermaid-svg-MtfrNDo5DG…

青少年編程與數學 02-018 C++數據結構與算法 16課題、貪心算法

青少年編程與數學 02-018 C數據結構與算法 16課題、貪心算法 一、貪心算法的基本概念定義組成部分 二、貪心算法的工作原理三、貪心算法的優點四、貪心算法的缺點五、貪心算法的應用實例&#xff08;一&#xff09;找零問題問題描述&#xff1a;貪心策略&#xff1a;示例代碼&a…