力扣--滑動窗口最大值

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

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

示例 1:

輸入:nums = [1,3,-1,-3,5,3,6,7], k = 3
輸出:[3,3,5,5,6,7]
解釋:
滑動窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       31 [3  -1  -3] 5  3  6  7       31  3 [-1  -3  5] 3  6  7       51  3  -1 [-3  5  3] 6  7       51  3  -1  -3 [5  3  6] 7       61  3  -1  -3  5 [3  6  7]      7

示例 2:

輸入:nums = [1], k = 1
輸出:[1]

提示:

  • 1 <= nums.length <= 105
  • -104?<= nums[i] <= 104
  • 1 <= k <= nums.length

對于這道題目來說,最應該相到也是我覺得最容易看懂的就是雙向隊列來實現,首先要明確用隊列來做的話,要想清楚一個思路,因為java沒有函數可以直接實現查找k個數得最大值,所以要放入隊列里面的話就必須吧其中最大的值放在顯眼位置就例如隊首或者隊尾,既然這樣如果把最大值放入隊首了,那就和單調隊列一個思路,如果后面插入的值小于隊首就進入隊列放在后面,如果進來的值大于隊首,就取代他放到隊首,此時從什么時候開始取最大值呢?就是當i>=k-1的時候,這里還有一個容易錯的地方就是,此時還要判斷隊首的值什么時候出隊列,因為這是一個滑動窗口,不可能你一開始的最大值在移動了幾個后還在隊列當中,所以此時還要判斷當i<i-k+1的時候還要將隊首元素pop出去,代碼如下

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {ArrayDeque<Integer> deque = new ArrayDeque<>();int n = nums.length;int[] res = new int[n - k + 1];int idx = 0;for(int i = 0; i < n; i++) {// 1.隊列頭結點需要在[i - k + 1, i]范圍內,不符合則要彈出while(!deque.isEmpty() && deque.peek() < i - k + 1){deque.poll();}// 2.既然是單調,就要保證每次放進去的數字要比末尾的都大,否則也彈出while(!deque.isEmpty() && nums[deque.peekLast()] < nums[i]) {deque.pollLast();}deque.offer(i);// 因為單調,當i增長到符合第一個k范圍的時候,每滑動一步都將隊列頭節點放入結果就行了if(i >= k - 1){res[idx++] = nums[deque.peek()];}}return res;}
}

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

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

相關文章

Vue核心 — Vue2響應式原理和核心源碼解析(核心中的核心)

一、前置知識 1、Vue 核心概念 Vue 是什么? Vue 是一款用于構建用戶界面的 JavaScript 框架。它基于標準 HTML、CSS 和 JavaScript 構建&#xff0c;并提供了一套聲明式的、組件化的編程模型&#xff0c;幫助你高效地開發用戶界面。 Vue 核心特點是什么? 響應式數據綁定:…

docker安裝tomcat容器

docker安裝tomcat容器 1、拉取鏡像 docker pull tomcat:8.5.46-jdk8-openjdk2、運行 docker run -d --name tomcat tomcat:8.5.46-jdk8-openjdk ? docker cp tomcat:/usr/local/tomcat/conf /data/tomcat/ ? docker rm -f tomcat ? docker run -d --name tomcat -p 8…

絕區捌--將GPT幻覺的發生率從20%以上降低到2%以下

總結&#xff1a;我們沒有使用微調&#xff0c;而是結合使用提示鏈和預處理/后處理來將幻覺發生率降低一個數量級&#xff0c;但這確實需要對 OpenAI 進行 3-4 倍的調用。還有很大的改進空間&#xff01; 使用 GPT 等大型語言模型面臨的最大挑戰之一是它們傾向于捏造信息。 這…

from functools import partial有什么用

functools.partial 是 Python 的 functools 模塊中的一個非常有用的函數&#xff0c;它用于部分應用一個函數。這意味著你可以創建一個新的函數&#xff0c;這個新函數是原函數的一個子集&#xff0c;即預先填充了原函數的一些參數&#xff0c;并返回這個新函數。這樣&#xff…

使用Python繪制QQ圖并分析數據

使用Python繪制QQ圖并分析數據 在這篇博客中&#xff0c;我們將探討如何使用Python中的pandas庫和matplotlib庫來繪制QQ圖&#xff08;Quantile-Quantile Plot&#xff09;&#xff0c;并分析數據文件中的內容。QQ圖是一種常用的統計圖表&#xff0c;用于檢查一組數據是否服從…

VUE+Spring Flux實現SSE長連接

VUE代碼 // 初始化EventSourceinitEventSource(url) {const token getAccessToken();const eventSource new EventSourcePolyfill(url, {headers: {Authorization: Bearer ${token},tenant-id: getTenantId(),}});eventSource.onerror (e) > {console.log("SSE連接錯…

C# 下sendmessage和postmessage的區別詳解與示例

文章目錄 1、SendMessage2、PostMessage3、兩者的區別&#xff1a; 總結 在C#中&#xff0c;SendMessage和PostMessage是兩個用于Windows編程的API&#xff0c;它們用于向窗口發送消息。這兩個方法都位于System.Windows.Forms命名空間中&#xff0c;通常用于自動化Windows應用程…

GitHub:現代軟件開發的協作平臺

引言 在現代軟件開發中&#xff0c;協作工具的選擇至關重要。GitHub作為全球最大的代碼托管平臺&#xff0c;已經成為開發者們不可或缺的工具。自2008年成立以來&#xff0c;GitHub不僅改變了代碼托管和協作的方式&#xff0c;還在開源軟件的發展中扮演了重要角色。本文將詳細…

科普文:分布式系統的架構設計模式

一、分布式架構基本概念 分布式架構是一種計算機系統設計方法&#xff0c;它將一個復雜的系統劃分為多個自治的組件或節點&#xff0c;并通過網絡進行通信和協作。每個組件或節點在功能上可以相互獨立&#xff0c;但又能夠通過消息傳遞或共享數據來實現協同工作。分布式架構主要…

值傳遞與引用傳遞:深入理解Java中的變量賦值和參數傳遞機制

在Java中&#xff0c;理解值傳遞&#xff08;值拷貝&#xff09;與引用傳遞&#xff08;地址拷貝&#xff09;之間的區別對于正確處理數據結構和對象至關重要。本文將通過示例代碼深入探討這兩種機制&#xff0c;并解釋它們如何影響程序的行為。 值傳遞&#xff08;值拷貝&…

獲取腳本執行時間

在運行一些腳本時&#xff0c;時間會過期&#xff0c;這時就需要重新更新token&#xff0c;下面做了一個demo判斷時間是否過期 import datetime import time starttimedatetime.datetime.now() # 時間進行格式化 starttimestarttime.strftime("%Y-%m-%d %H:%M:%S") …

高效利用iCloud指南

高效利用 iCloud 需要了解其各種功能和最佳實踐&#xff0c;以充分發揮其云存儲和同步能力。以下是詳細的指南&#xff1a; ### 1. 設置和管理 iCloud 存儲 **初始設置** - 確保在所有設備&#xff08;iPhone、iPad、Mac&#xff09;上使用同一 Apple ID 登錄 iCloud。 - 在設…

iPaaS丨企業應用及數據集成的重要性和挑戰

在激烈的市場競爭中&#xff0c;企業服務總線和數據總線扮演著企業神經網絡的角色&#xff0c;它們將不同的業務部門、系統以及數據緊密相連&#xff0c;保障信息流通無阻&#xff0c;實現資源的高效分配。這樣的集成不僅提高了企業的運營效率&#xff0c;還增強了企業的適應性…

虛擬機因斷電進入./#狀態解決辦法

現象&#xff1a; 解決&#xff1a;先查看錯誤日志&#xff1a;journalctl -p err -b查看自己虛擬機中標黃部分的名字 之后運行&#xff1a;xfs_repair -v -L /dev/sda #這里sda用你自己標黃的 最后重啟 reboot 即可。

使用Dockerfile和ENTRYPOINT運行Python 3腳本

在Docker中運行Python 3腳本是一種常見的部署應用程序的方式。通過使用Dockerfile&#xff0c;我們可以定義一個包含Python環境和應用程序的Docker鏡像。在Dockerfile中&#xff0c;我們可以使用ENTRYPOINT指令來指定當容器啟動時應該運行的命令。 **一、創建Dockerfile** 首先…

在Linux上運行macOS:深度解析OSX-KVM項目

在Linux上運行macOS&#xff1a;深度解析OSX-KVM項目 在現代開發和測試環境中&#xff0c;能夠在不同操作系統之間無縫切換是至關重要的。對于開發者而言&#xff0c;如何在Linux系統上運行macOS一直是一個挑戰。然而&#xff0c;OSX-KVM項目為我們提供了一種高效的解決方案&a…

R包:ggsci期刊配色

介紹 不同期刊配色大多數時候不一樣&#xff0c;為了更好符合期刊圖片顏色的配色&#xff0c;有人開發了ggsci這個R包。它提供以下函數&#xff1a; scale_color_palname() scale_fill_palname() 對應不同期刊的color和fill函數。 導入數據R包 library("ggsci")…

如何一起解壓縮多個小壓縮包unzip multiprt zip file

這個問題有兩種解讀&#xff0c;一種是需要解壓這個文件夾里面的所有zip文件。另一個是壓縮文件時候存成了多個part&#xff0c;需要一起解壓縮。 環境 Ubuntu22.04 解決方法 解壓當前文件夾所有zip文件 unzip your/folder/*.zip解壓同一壓縮文件的多個part sudo apt ins…

SpringBoot使用@RestController處理GET和POST請求

在Spring MVC中&#xff0c;RestController注解的控制器類可以處理多種HTTP請求方法&#xff0c;包括GET和POST。這些請求方法通過特定的注解來映射&#xff0c;比如GetMapping用于GET請求&#xff0c;PostMapping用于POST請求。這些注解是RequestMapping的特定化版本&#xff…

2024年全面導入APS系統:提升工廠生產效率的策略

在快速變化的市場環境中&#xff0c;急單、插單、訂單設計變更、訂單交期變更、訂單取消、供應鏈移動等問題已經是制造業時時刻刻都在面對的問題&#xff0c;在訂單量下降的市場環境下&#xff0c;企業本身的業務工作反而越來越忙碌。在此背景下&#xff0c;當今制造業企業亟需…