代碼隨想錄算法訓練營第五十天| 739. 每日溫度、496.下一個更大元素 I、503.下一個更大元素II

739. 每日溫度

在這里插入圖片描述

題目鏈接: 739. 每日溫度
文檔講解:代碼隨想錄
狀態:不會

思路:
這道題需要找到下一個更大元素。
使用棧來存儲未找到更高溫度的下標,那么棧中的下標對應的溫度從棧底到棧頂是遞減的。這意味著,棧頂元素的溫度是當前溫度數組中未找到更高溫度的最高溫度的下標。

總結成一句話就是:在解決“下一個更大元素”問題時,遍歷數組時,如果當前元素大于棧頂元素,就先將棧頂元素出棧并更新其結果,然后將當前元素入棧。

題解:

    public int[] dailyTemperatures(int[] temperatures) {int n = temperatures.length;int[] res = new int[n];  // 初始化結果數組,長度與溫度數組相同Deque<Integer> stack = new LinkedList<>();  // 初始化棧,用于存儲未找到更高溫度的下標for (int i = 0; i < n; i++) {  // 遍歷溫度數組// 如果當前溫度高于棧頂元素的溫度,則更新結果數組// 使用棧來存儲未找到更高溫度的下標,棧中的下標對應的溫度從棧底到棧頂是遞減的。// 這意味著,棧頂元素的溫度是當前溫度數組中未找到更高溫度的最高溫度的下標。while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peekLast()]) {int index = stack.pollLast();  // 彈出棧頂元素res[index] = i - index;  // 計算當前下標與棧頂元素下標的差值,并更新結果數組}stack.addLast(i);  // 將當前下標添加到棧中}return res;  // 返回結果數組}

496.下一個更大元素 I

在這里插入圖片描述

題目鏈接: 496.下一個更大元素 I
文檔講解:代碼隨想錄
狀態:用的另一種方法

單調棧思路:

這題是屬于找下一個更大元素,所以可以使用單調棧。

和每日溫度類似,可以對nums2使用單調棧,即當前元素大于棧頂元素,就先將棧頂元素出棧并更新其結果,然后將當前元素入棧。但是這道題需要從nums2中找nums1元素,并且res的更新是按照nums1來的,所以可以將nums1中的元素存入哈希表中,如果nums2中遍歷到的元素是nums1中的元素,則額外更新res。

題解:

    // 方法1: 暴力+哈希解法public int[] nextGreaterElement(int[] nums1, int[] nums2) {int[] res = new int[nums1.length];  // 結果數組HashMap<Integer, Integer> map = new HashMap<>();  // 存儲 nums2 中元素的下標for (int i = 0; i < nums2.length; i++) {map.put(nums2[i], i);  // 將 nums2 中的元素及其下標放入 map 中}for (int i = 0; i < nums1.length; i++) {Integer index = map.get(nums1[i]);  // 獲取 nums1 中元素在 nums2 中的下標for (int j = index; j < nums2.length; j++) {if (nums2[j] > nums1[i]) {  // 找到第一個比 nums1[i] 大的元素res[i] = nums2[j];  // 更新結果數組break;} else {res[i] = -1;  // 未找到更大元素,默認設置為 -1}}}return res;}// 方法2: 單調棧public int[] nextGreaterElement2(int[] nums1, int[] nums2) {int[] res = new int[nums1.length];  // 結果數組Arrays.fill(res, -1);  // 初始化結果數組為 -1HashMap<Integer, Integer> map = new HashMap<>();  // 存儲 nums1 中元素的下標Deque<Integer> stack = new LinkedList<>();  // 初始化單調棧for (int i = 0; i < nums1.length; i++) {map.put(nums1[i], i);  // 將 nums1 中的元素及其下標放入 map 中}for (int i = 0; i < nums2.length; i++) {// 如果當前元素 nums2[i] 大于棧頂元素,則更新棧頂元素在結果數組中的值while (!stack.isEmpty() && nums2[stack.peekLast()] < nums2[i]) {Integer num = nums2[stack.pollLast()];  // 彈出棧頂元素if (map.containsKey(num)) {res[map.get(num)] = nums2[i];  // 更新結果數組中對應位置的值}}stack.addLast(i);  // 將當前元素下標加入棧中}return res;}

503.下一個更大元素II

在這里插入圖片描述

題目鏈接: 503.下一個更大元素II
文檔講解:代碼隨想錄
狀態:磕磕絆絆

思路:
最直接的想法把兩個數組拼接在一起,然后使用單調棧求下一個最大值。
優化的話在遍歷的過程中模擬走了兩邊nums。

題解:

   public int[] nextGreaterElements(int[] nums) {int n = nums.length; // 獲取數組的長度int[] res = new int[n]; // 結果數組,用來存儲每個元素的下一個更大元素Arrays.fill(res, -1); // 初始化結果數組,默認值為-1Deque<Integer> stack = new LinkedList<>(); // 單調棧,用來存儲數組元素的下標// 遍歷2倍長度的數組,模擬循環數組for (int i = 0; i < 2 * n; i++) {// 如果當前元素大于棧頂元素,則更新棧頂元素在結果數組中的值while (!stack.isEmpty() && nums[i % n] > nums[stack.peekLast()]) {res[stack.pollLast()] = nums[i % n]; // 更新結果數組中對應下標的值}// 只將前n個元素的下標入棧if (i < n) {stack.addLast(i); // 將當前下標入棧}}return res; // 返回結果數組}

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

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

相關文章

Redis數據同步

文章簡單介紹基于redis-shake的redis數據同步&#xff0c;該工具基于每個節點同步數據&#xff0c;即每個主節點需同步一次&#xff0c;才能完成整個redis集群的數據同步。 1、redis節點操作 ### 查看redis版本 ./bin/redis-server --version### 登錄redis ./bin/redis-cli -…

改變Ubuntu的Tab沒有縮進4格(Makefile)

1.vim里的Tab 用vi指令打開這個文件&#xff0c;沒有的話就新創建一個 vi ~/.vimrc在打開的文件中輸入以下兩行 1 set tabstop42 set shiftwidth4 ~ Esc &#xff1a; x&#xff0c;保存并退出即可 資料來源&#xff1a; 2024年5月21日-vi/vim …

Linux Ubuntu MySQL環境安裝

1. 更新軟件源 首先&#xff0c;確保你的Ubuntu系統已經更新了軟件源列表&#xff0c;以便能夠下載到最新的軟件包。打開終端并輸入以下命令&#xff1a; sudo apt update 2. 安裝MySQL服務器 打開終端并輸入以下命令來安裝MySQL服務器 sudo apt install mysql-server 在…

一個便捷的web截圖庫~【送源碼】

隨著時間的發展&#xff0c;前端開發的范圍越來越廣&#xff0c;能夠實現的功能也越來越多&#xff0c;要實現的功能也五花八門&#xff0c;今天就給大家介紹一個web截圖庫,讓前端也能實現截圖功能—— js-web-screen-shot js-web-screen-shot js-web-screen-shot 是一個基于 …

嵌入式板級支持包(BSP)80道面試題及參考答案(3萬字長文)

目錄 解釋什么是通用輸入輸出(GPIO)接口及其在BSP中的作用。 描述SPI接口的主要特點和用途。 說明IC總線協議的工作原理。 如何在BSP中配置一個UART接口? USB設備控制器在BSP中的初始化步驟是什么? 以太網接口如何在BSP中被支持? 什么是SDIO,它在哪些場景下會被使…

語言模型演進:從NLP到LLM的跨越之旅

在人工智能的浩瀚宇宙中&#xff0c;自然語言處理&#xff08;NLP&#xff09;一直是一個充滿挑戰和機遇的領域。隨著技術的發展&#xff0c;我們見證了從傳統規則到統計機器學習&#xff0c;再到深度學習和預訓練模型的演進。如今&#xff0c;我們站在了大型語言模型&#xff…

【接口設計】如何設計統一 RESTful 風格的數據接口

如何設計統一 RESTful 風格的數據接口 1.版本控制1.1 通過 URL1.2 通過自定義請求頭1.3 通過 Accept 標頭 2.過濾信息3.確定 HTTP 的方法4.確定 HTTP 的返回狀態5.定義統一返回的格式 近年來&#xff0c;隨著移動互聯網的發展&#xff0c;各種類型的客戶端層出不窮。如果不統一…

Mybatis-Plus最優化持久層開發

Mybatis-plus&#xff1a;最優化持久層開發 一&#xff1a;Mybatis-plus快速入門&#xff1a; 1.1&#xff1a;簡介&#xff1a; Mybatis-plus&#xff08;簡稱MP&#xff09;是一個Mybatis的增強工具&#xff0c;在mybatis的基礎上只做增強不做改變; 提高效率&#xff1b;自…

國漫推薦11

1.《元龍》 2.《惡魔法則》2023年9月29日 3.《三十六騎》 4.《山河劍心》 5.劍網3俠肝義膽沈劍心 《劍網3俠肝義膽沈劍心》 《劍網3俠肝義膽沈劍心 第二季》 《劍網3俠肝義膽沈劍心之長漂》&#xff08;番外&#xff09; 《劍網3俠肝義膽沈劍心 第三季》 6.《仙逆》東方玄幻…

Uniswap V2和Uniswap V3的區別

Uniswap V2和Uniswap V3是兩個不同版本的去中心化交易協議&#xff0c;由Uniswap團隊開發和維護。它們之間的主要區別包括以下幾點&#xff1a; 資金池模型不同: Uniswap V2: 使用恒定乘積市場模型&#xff0c;也就是 x * y k。這意味著每個資金池中的資產的乘積保持不變&…

Transformer的模型的擴展與應用領域的拓展 - Transformer教程

在如今的人工智能領域&#xff0c;Transformer模型已經成為了眾多研究和應用的焦點。從自然語言處理到計算機視覺&#xff0c;Transformer模型的擴展與應用領域的拓展帶來了無數的可能性。今天&#xff0c;我們就來聊聊Transformer模型的擴展以及它在不同領域的廣泛應用。 首先…

生產管理系統功能全拆解:哪些功能是企業真正需要的?

制造業的伙伴經常聽到“生產管理”&#xff0c;但很多人可能只是模糊地知道它與工廠、生產線有關。那么&#xff0c;到底什么是生產管理呢&#xff1f;它的重要性又體現在哪里呢&#xff1f;接下來&#xff0c;我就以輕松的方式&#xff0c;帶大家走進生產管理的世界&#xff0…

函數練習·二 基礎題

# 【以下功能都使用函數封裝】 # 提示: 涉及到要返回的題目,請使用return # 基礎題 # 1.封裝函數&#xff0c;計算從1到某個數以內所有奇數的和并返回 def fn1(n): return sum([i for i in range(1, n, 2)]) print(fn1(7)) # 2.封裝函數&#xff0c;判斷某個數是否是偶…

微信閃退怎么回事?實用技巧助你輕松應對

在使用微信的過程中&#xff0c;偶爾會遇到閃退的問題&#xff0c;這不僅影響我們的日常溝通&#xff0c;還可能導致重要信息的丟失。那么&#xff0c;微信閃退怎么回事呢&#xff1f;閃退的原因可能有很多&#xff0c;包括軟件問題、手機存儲不足、系統不兼容等。本文將詳細分…

筆記本電腦數據丟失如何恢復?

在計算機網絡日益普及的今天&#xff0c;計算機已波及到人們的生活、工作、學習及消費等廣泛領域&#xff0c;其服務和管理也涉及政府、工商、金融及用戶等諸多方面。筆記本電腦等電子產品被各行各業的人所喜愛和接受&#xff0c;早已成為人們出差的必備品&#xff0c;可以用來…

keepalived高可用集群

一、keepalived&#xff1a; 1.keepalive是lvs集群中的高可用架構&#xff0c;只是針對調度器的高可用&#xff0c;基于vrrp來實現調度器的主和備&#xff0c;也就是高可用的HA架構&#xff1b;設置一臺主調度器和一臺備調度器&#xff0c;在主調度器正常工作的時候&#xff0…

OS_同步與互斥

2024-07-04&#xff1a;操作系統同步與互斥學習筆記 第9節 同步與互斥 9.1 同步互斥的基本概念9.1.1 同步關系9.1.2 互斥關系9.1.3 臨界資源9.1.4 臨界區9.1.5 同步機制應遵循規則 9.2 軟件同步機制9.2.1 單標志法9.2.2 雙標志先檢查法9.2.3 雙標志后檢查法9.2.4 peterson算法 …

BP神經網絡與反向傳播算法在深度學習中的應用

BP神經網絡與反向傳播算法在深度學習中的應用 在神經網絡的發展歷史中&#xff0c;BP神經網絡&#xff08;Backpropagation Neural Network&#xff09;占有重要地位。BP神經網絡通過反向傳播算法進行訓練&#xff0c;這種算法在神經網絡中引入了一種高效的學習方式。隨著深度…

jstat命令介紹

jstat&#xff1a;查看JVM統計信息 一 基本情況二 基本語法2.1 option參數1. 類裝載相關的&#xff1a;2. 垃圾回收相關的-gc&#xff1a;顯示與GC相關的堆信息。包括Eden區、兩個Survivor區、老年代、永久代等的容量、已用空間、GC時間合計等信息。-gccapacity&#xff1a;顯示…

【C++】C++-機房收費管理系統(源碼+注釋)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…