力扣239.滑動窗口最大值

文章目錄

  • 一、前言
  • 二、單調隊列

一、前言

力扣239.滑動窗口最大值

滑動窗口最大值,這道題給定一個數組,以及一個窗口的長度,這個窗口會往后滑動,直到數組最后一個元素。

要求每個滑動窗口的中的最大值。對于這道題,我剛看到的時候沒有比較好的思路,心里想沒思路?直接一個無腦暴力!

暴力的思路就是遍歷數組的時候,每次遍歷滑動窗口找出最大值!

果然,超時了。。。。。。

image-20241214155929713

遍歷數組的時間復雜度是O(n),如果當滑動窗口的長度為n/2的時候,遍歷滑動窗口找出最大值的時間復雜度是O(n),那么整體的暴力算法的時間復雜度是O(n2)。


二、單調隊列

正所謂“空間換時間”,所以在這題中,想要降低時間復雜度,那就要犧牲一點空間,用空間來換時間。

這道題單看數組可能不是很直觀,如果將數組轉化為折線圖,那么就能看出規則了!

假設現在有一個這樣的數組,nums = [2,1,4,2,3,2], k = 3,該數組的折線圖如下所示。

image-20241214161043730

[2,1,4]這個滑動窗口里面,最大值的4,但是2和1有沒有可能作為滑動窗口的最大值呢?

這個是不可能的,因為4在2和1的右邊,包含了1或2的滑動窗口必然包含了4,因此4會是最大值,而2和1沒有機會成為最大值,于是就需要記錄4。

隨著滑動窗口往下往下滑動,那么滑動窗口為[1,4,2],最大值仍然為4,前面說了1是不可能有成為最大值的記錄,那么這里的2有成為最大值的機會么?

很顯然,是有可能的,因為2在4的右邊,而且2后面的數字還不知道,有可能是比2小,并且在后面包含了2的滑動窗口中,可能不會包含4,因此2有可能成為最大值,于是需要將2記錄下來。

窗口繼續往下滑動,滑動窗口為[4,2,3],最大值為4,由于這次有3,3比2大,和前面一樣,有3在,2不可能成為最大值,于是移除前面記錄的2,而是將3進行記錄。

窗口繼續滑動,滑動窗口為[2,3,2],這時候4已經超出滑動窗口范圍,需要在前面記錄的數據中移除,于是這次滑動窗口的最大值就是3了

整體思路如上所示,這里需要用到一個數據結構——單調隊列,思路如下:

  1. 入隊列,將元素添加到隊尾,并且需要維持隊列的單調性(隊列從大到小排序)
  2. 出隊列,當元素超出滑動窗口的范圍的時候,需要出隊列
  3. 記錄答案,每次滑動窗口的最大值就是隊列的首部!
public int[] maxSlidingWindow(int[] nums, int k) {int[] res = new int[nums.length - k + 1];Deque<Integer> queue = new LinkedList<>();for (int i = 0; i < nums.length; i++) {while (!queue.isEmpty() && nums[i] > nums[queue.getLast()]){// 維持單調性queue.removeLast();}if (!queue.isEmpty() && i - queue.getFirst() >= k){queue.removeFirst();}queue.addLast(i);if (i >= k - 1){// 收集結果res[i - k + 1] = nums[queue.getFirst()];}}return res;
}

image-20241214162540951
解決!下班!!!


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

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

相關文章

mac 安裝CosyVoice (cpu版本)

CosyVoice 介紹 CosyVoice 是阿里研發的一個tts大模型 官方項目地址&#xff1a;https://github.com/FunAudioLLM/CosyVoice.git 下載項目&#xff08;非官方&#xff09; git clone --recursive https://github.com/v3ucn/CosyVoice_for_MacOs.git 進入項目 cd CosyVoic…

電腦插件修復工具

DirectX修復工具 鏈接&#xff1a;夸克網盤分享

Maven 安裝配置(詳細教程)

文章目錄 一、Maven 簡介二、下載 Maven三、配置 Maven3.1 配置環境變量3.2 Maven 配置3.3 IDEA 配置 四、結語 一、Maven 簡介 Maven 是一個基于項目對象模型&#xff08;POM&#xff09;的項目管理和自動化構建工具。它主要服務于 Java 平臺&#xff0c;但也支持其他編程語言…

Scala中的泛型特質

代碼如下&#xff1a; package test41 //泛型特質 object test3 { //定義一個日志//泛型特質&#xff0c;X是泛型名稱&#xff0c;可以更改。trait Logger[X] {val content: Xdef show():Unit }class FileLogger extends Logger[String] {override val content: String "…

前端三大框架 Vue、React 和 Angular 的市場占比分析

一、引言 ?? 隨著前端技術的迅速發展&#xff0c;Vue.js、React 和 Angular 已成為全球最受歡迎的三大前端框架。在國內外&#xff0c;不同的框架在市場中的占比和流行程度存在顯著差異。本文將從全球和中國市場的角度&#xff0c;對這三大框架的市場占比進行分析&#xff0…

vue3+echarts+websocket分時圖與K線圖實時推送

一、父組件代碼&#xff1a; <template> <div class"chart-box" v-loading"loading"> <!-- tab導航欄 --> <div class"tab-box"> <div class"tab-list"> <div v-for"(item, index) in tabList…

用python的flask寫的一個MQTT中轉功能,http的方式發送數據和接收數據

需求背景 給一個客戶對接人臉識別的設備&#xff0c;最后需要通知服務端進行一些消息推送。 簡單例子 # 作者 陳老師 # https://v.iiar.cn import json import paho.mqtt.client as mqtt import requests from flask import Flask, requestapp Flask(__name__)# MQTT配置 mq…

ASP.NET |日常開發中讀寫XML詳解

ASP.NET &#xff5c;日常開發中讀寫XML詳解 前言一、XML 概述1.1 定義和結構1.2 應用場景 二、讀取 XML 文件2.1 使用XmlDocument類&#xff08;DOM 方式&#xff09;2.2 使用XmlReader類&#xff08;流方式&#xff09; 三、寫入 XML 文件3.1 使用XmlDocument類3.2 使用XmlWr…

分布式 Paxos算法 總結

前言 相關系列 《分布式 & 目錄》《分布式 & Paxos算法 & 總結》《分布式 & Paxos算法 & 問題》 參考文獻 《圖解超難理解的 Paxos 算法&#xff08;含偽代碼&#xff09;》《【超詳細】分布式一致性協議 - Paxos》 Basic-Paxos 基礎帕克索斯算法…

Git-基礎操作命令

目錄 Git基礎操作命令 case *查看提交日志 log 版本回退 get add . Git基礎操作命令 我們創建并且初始化這個倉庫以后&#xff0c;我們就要在里面進行操作。 Git 對于文件的增刪改查存在幾個狀態&#xff0c;這些修改狀態會隨著我們執行Git的命令而發生變化。 untracked、…

Spring Boot 實戰:構建一個社交平臺 API

在這篇博客中&#xff0c;我們將繼續深入 Spring Boot 的開發實踐&#xff0c;通過構建一個簡單的社交平臺 API&#xff0c;幫助大家理解如何使用 Spring Boot 高效地開發一個具有注冊、登錄、個人資料管理、帖子發布與評論、點贊等功能的社交平臺。在開發過程中&#xff0c;我…

配置mysqld(讀取選項內容,基本配置),數據目錄(配置的必要性,目錄下的內容,具體文件介紹,修改配置)

目錄 配置mysqld 讀取選項內容 介紹 啟動腳本 基本配置 內容 端口號 數據目錄的路徑 配置的必要性 配置路徑 mysql數據目錄 具體文件 修改配置時 權限問題 配置mysqld 讀取選項內容 介紹 會從[mysqld] / [server] 節點中讀取選項內容 優先讀取[server] 雖然服務…

智能家居WTR096-16S錄放音芯片方案,實現語音播報提示及錄音留言功能

前言&#xff1a; 在當今社會的高速運轉之下&#xff0c;夜幕低垂之時&#xff0c;許多辛勤工作的父母尚未歸家。對于肩負家庭責任的他們而言&#xff0c;確保孩童按時用餐與居家安全成為心頭大事。此時&#xff0c;家居留言錄音提示功能應運而生&#xff0c;恰似家中的一位無形…

Java 編程基礎:開啟編程世界的大門

一、Java 環境搭建 在開始編寫 Java 代碼之前&#xff0c;我們需要先搭建 Java 開發環境。 1. 安裝 JDK&#xff08;Java Development Kit&#xff09; JDK 是 Java 開發的核心工具包&#xff0c;它包含了編譯 Java 源文件所需的編譯器&#xff08;javac&#xff09;以及運行…

pytorch bilstm crf的教程,注意 這里不支持批處理,要支持批處理 用torchcrf這個。

### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要結構&#xff1a; ![title](sources/bilstm.png) pytorch bilstm crf的教程&#xff0c;注意 這里不支持批處理 Python version…

【SickOs1.1靶場滲透】

文章目錄 一、基礎信息 二、信息收集 三、反彈shell 四、提權 一、基礎信息 Kali IP&#xff1a;192.168.20.146 靶機IP&#xff1a;192.168.20.150 二、信息收集 端口掃描 nmap -sS -sV -p- -A 192.168.20.150 開放了22、3128端口&#xff0c;8080端口顯示關閉 22端…

【HF設計模式】03-裝飾者模式

聲明&#xff1a;僅為個人學習總結&#xff0c;還請批判性查看&#xff0c;如有不同觀點&#xff0c;歡迎交流。 摘要 《Head First設計模式》第3章筆記&#xff1a;結合示例應用和代碼&#xff0c;介紹裝飾者模式&#xff0c;包括遇到的問題、遵循的 OO 原則、達到的效果。 …

Mysql數據庫中,什么情況下設置了索引但無法使用?

在MySQL數據庫中&#xff0c;即使已經正確設置了索引&#xff0c;但在某些情況下索引可能無法被使用。 以下是一些常見的情況&#xff1a; 1. 數據分布不均勻 當某個列的數據分布非常不均勻時&#xff0c;索引可能無法有效地過濾掉大部分的數據&#xff0c;導致索引失效。 …

秒殺業務中的庫存扣減為什么不加分布式鎖?

前言 說到秒殺業務的庫存扣減&#xff0c;就還是得先確認我們的扣減基本方案。 秒殺場景的庫存扣減方案 一般的做法是&#xff0c;先在Redis中做扣減&#xff0c;然后發送一個MQ消息&#xff0c;消費者在接到消息之后做數據庫中庫存的真正扣減及業務邏輯操作。 如何解決數據…

ChatGPT生成測試用例的最佳實踐(一)

前面介紹的案例主要展示了ChatGPT在功能、安全和性能測試用例生成方面的應用和成果。通過ChatGPT生成測試用例&#xff0c;測試團隊不僅可以提升工作效率&#xff0c;還可以加快測試工作的速度&#xff0c;盡早發現被測系統中的問題。問題及早發現有助于提高軟件的質量和用戶滿…