js單調棧解題模板

模板

function solve(arr) {const stack = [];const result = new Array(arr.length).fill(默認值);for (let i = 0; i < arr.length; i++) {while (stack.length && 比較條件(arr[i], arr[棧頂])) {const top = stack.pop();result[top] = 計算結果(i, top); }stack.push(i);}return result;
}

例題一:每日溫度

題目描述

給定一個整數數組 temperatures ,表示每天的溫度,返回一個數組 answer ,其中 answer[i] 是指對于第 i 天,下一個更高溫度出現在幾天后。如果氣溫在這之后都不會升高,請在該位置用 0 來代替。

示例 1:
輸入: temperatures = [73,74,75,71,69,72,76,73]
輸出: [1,1,4,2,1,1,0,0]

代碼

 //"需要為每個元素尋找下一個更大/更小元素"這類問題適用于單調棧
var dailyTemperatures = function(temperatures) {const n = temperatures.length;let stack  = [];let ans = new Array(n).fill(0);for(let i=0; i<n; i++){while(stack.length && temperatures[i] > temperatures[stack[stack.length-1]]){let cur = stack.pop();ans[cur] = i-cur;}stack.push(i);}return ans;
};

例題二:柱狀圖中最大的矩形

題目描述

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
在這里插入圖片描述

代碼

var largestRectangleArea = function(heights) {// 頭部加0:避免空棧判斷,保證棧永遠不為空// 尾部加0:強制所有有效柱子出棧計算heights = [0,...heights,0];const n = heights.length;let st = [];let ans = 0;for(let i=0; i<n; i++){while(st.length && heights[i] < heights[st[st.length-1]]){let h = heights[st.pop()];let w = i-st[st.length-1]-1; //左邊界減去右邊界(棧頂元素是第一個比當前矮的左柱子)ans = Math.max(ans, h*w); }st.push(i);}return ans;
};

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

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

相關文章

[藍橋杯真題題目及解析]2025年C++b組

移動距離&#xff08;填空&#xff09;** 小明初始在二維平面的原點&#xff0c;他想前往坐標 (233,666)。在移動過程中&#xff0c;他只能采用以下兩種移動方式&#xff0c;并且這兩種移動方式可以交替、不限次數地使用&#xff1a; 水平向右移動&#xff0c;即沿著 x 軸正方…

【ICMP協議深度解析】從網絡診斷到安全實踐

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵報文類型說明協議版本對比 二、實戰演示環境配置要求核心實驗實現實驗1&#xff1a;標準ping流程實驗2&#xff1a;traceroute路徑發現實驗3&#xff1a;自定義ICMP…

安卓基礎(懸浮窗分級菜單和彈窗)

initializeViews() 初始化 把全部的按鈕都弄出來 // 主菜單按鈕ImageButton mainButton floatingMenuView.findViewById(R.id.main_button);// 二級菜單按鈕subButtons new ImageButton[3];subButtons[0] floatingMenuView.findViewById(R.id.sub_button_1);subButtons[1]…

馮·諾依曼體系:現代計算機的底層邏輯與百年傳承

在智能手機流暢運行復雜游戲、超級計算機模擬氣候變化的今天&#xff0c;很少有人會想到&#xff0c;驅動這些神奇機器運轉的核心架構&#xff0c;依然遵循著70多年前提出的設計理念。這就是由匈牙利裔美國科學家約翰馮諾依曼&#xff08;John von Neumann&#xff09;奠定的馮…

【云備份】服務端工具類實現

1.文件實用工具類設計 不管是客戶端還是服務端&#xff0c;文件的傳輸備份都涉及到文件的讀寫&#xff0c;包括數據管理信息的持久化也是如此&#xff0c;因此首先設 計封裝文件操作類&#xff0c;這個類封裝完畢之后&#xff0c;則在任意模塊中對文件進行操作時都將變的簡單化…

CGI 協議是否會具體到通訊報文?

CGI&#xff08;Common Gateway Interface&#xff09;不涉及具體的網絡通訊報文格式&#xff0c;它定義的是 Web服務器與外部程序之間的數據交互方式&#xff0c;而不是像HTTP或FastCGI那樣的二進制協議。下面分幾個方面詳細說明&#xff1a; 1. CGI 的交互方式&#xff08;非…

【Mytais系列】Type模塊:類型轉換

MyBatis 的 類型系統&#xff08;Type System&#xff09; 是框架處理 Java 類型與數據庫類型之間映射的核心模塊&#xff0c;它通過 類型處理器&#xff08;TypeHandler&#xff09;、類型別名&#xff08;TypeAlias&#xff09; 和 類型轉換器 等機制&#xff0c;實現了數據庫…

新華三H3CNE網絡工程師認證—動態NAT

靜態NAT嚴格地一對一進行地址映射&#xff0c;這就導致即便內網主機長時間離線或者不發送數據時&#xff0c;與之對應的共有地址也處于使用狀態。為了避免地址浪費&#xff0c;動態NAT提出了地址池的概念&#xff1a;所有可用的共用地址組成地址池。 當內部主機訪問外部網絡時臨…

華為OD機試真題 Java 實現【水庫蓄水問題】

前言 博主刷的華為機考題&#xff0c;代碼僅供參考&#xff0c;因為沒有后臺數據&#xff0c;可能有沒考慮到的情況 如果感覺對你有幫助&#xff0c;請點點關注點點贊吧&#xff0c;謝謝你&#xff01; 題目描述 思路 1. 其實就是找一個最大的水坑&#xff0c;兩個…

【Linux】Petalinux驅動開發基礎

基于Petalinux做Linux驅動開發。 部分圖片和經驗來源于網絡,若有侵權麻煩聯系我刪除,主要是做筆記的時候忘記寫來源了,做完筆記很久才寫博客。 專欄目錄:記錄自己的嵌入式學習之路-CSDN博客 目錄 1 一個完整的Linux系統(針對Zynq) 1.1 PS部分 1.2 PL部分(若…

JAVA刷題記錄: 遞歸,搜索與回溯

專題一 遞歸 面試題 08.06. 漢諾塔問題 - 力扣&#xff08;LeetCode&#xff09; class Solution {public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {dfs(A, B, C, A.size());}public void dfs(List<Integer> a, List<In…

YOLOv11改進:利用RT-DETR主干網絡PPHGNetV2助力輕量化目標檢測

這里寫自定義目錄標題 YOLOv11改進&#xff1a;利用RT-DETR主干網絡PPHGNetV2助力輕量化目標檢測1. 介紹2. 引言3. 技術背景3.1 YOLOv11概述3.2 RT-DETR與PPHGNetV23.3 相關工作 4. 應用使用場景5. 詳細代碼實現5.1 環境準備5.2 PPHGNetV2主干網絡實現5.3 YOLOv11與PPHGNetV2集…

WPF之Button控件詳解

文章目錄 1. 引言2. Button控件基礎Button類定義 3. Button控件的核心屬性3.1 Content屬性3.2 IsDefault屬性3.3 IsCancel屬性3.4 其他常用屬性 4. 按鈕樣式與模板自定義4.1 簡單樣式設置4.2 使用Style對象4.3 觸發器使用4.4 使用ControlTemplate完全自定義4.5 按鈕視覺狀態 5.…

【Java】2025 年 Java 學習路線:從入門到精通

文章目錄 一、Java基礎階段(4-8周)1. 開發環境搭建2. 核心語法基礎3. 面向對象編程(OOP)4. 核心類庫二、Java進階階段(6-10周)1. JVM深度理解2. 并發編程3. 新特性掌握4. 設計模式三、開發框架與中間件(8-12周)1. Spring生態2. 持久層框架3. 常用中間件四、項目實戰階段…

虛幻引擎入門筆記

【虛幻5】UE5新手入門嘗試 虛幻引擎的基礎設置 1.驗證-當文件誤刪的時候&#xff0c;對其進行驗證&#xff0c;可以恢復。 2.虛幻引擎極其強大&#xff0c;可以實現多種復合技能&#xff0c;所在創建項目頁面可以看見不只是創建游戲的項目 3.更改虛幻引擎默認的緩存地址。有些…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】1.1 數據庫核心概念與PostgreSQL技術優勢

&#x1f449; 點擊關注不迷路 &#x1f449; 點擊關注不迷路 &#x1f449; 點擊關注不迷路 文章大綱 深度解析PostgreSQL核心架構與技術優勢&#xff1a;從數據庫原理到實戰場景1.1 數據庫核心概念與PostgreSQL技術優勢1.1.1 關系型數據庫核心架構解析1.1.1.1 數據庫系統的底…

詳解SLAM中的李群和李代數(上)

1 概述 最近閱讀高翔大神的《視覺SLAM十四講》這本書&#xff0c;感覺整本書寫的非常的平實&#xff0c;用非常接地氣的語言毫無保留的介紹了視覺SLAM的相關知識&#xff0c;非常值得一讀。不過&#xff0c;在第4章出現的李群和李代數的相關概念就有點令人難以費解了。其實這段…

libevent庫詳解:高性能異步IO的利器

目錄 一、libevent 簡介 主要特點&#xff1a; 二、事件模型原理 1. event_base 2. event 3. evconnlistener&#xff08;TCP監聽器&#xff09; 4. bufferevent 簡化流程如下&#xff1a; 三、libevent 使用示例 1. 創建事件主循環 2. 創建監聽器&#xff08;TCP&a…

從 “零” 做個開源音樂軟件“SteadyBeat”吧!<1> 準備

換換腦子&#xff0c;做個音樂軟件&#xff0c;根據調性、和弦走向&#xff08;情感&#xff09;、節拍、速度等需求&#xff0c;結合AI和一眾工具&#xff0c;自動生成伴奏、Solo等&#xff0c;有點像庫樂隊&#xff01;自己平時也用得著&#xff0c;暫時取名叫《SteadyBeat》…

npm error code CERT_HAS_EXPIRED

npm error code CERT_HAS_EXPIRED 歡迎來到我的主頁&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就職于醫療科技公司&#xff0c;熱衷分享知識&#xff0c;武漢城市開發者社區主理人 擅長.net、C、python開發&#xff0c; 如果遇到技術問題&#xff0c;即可私…