国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當前位置:首頁 > 科技  > 軟件

數組結構~什么是單調棧

來源: 責編: 時間:2023-08-09 23:02:09 434觀看
導讀什么是棧要弄明白什么是棧,我們需要先舉一個生活中的例子。假如有一個又細又長的圓筒,圓筒一端封閉,另一端開口。往圓筒里放 入乒乓球,先放入的靠近圓筒底部,后放入的靠近圓筒入口。那么,要想取出這些乒乓球,則只能按照和放

什么是棧

要弄明白什么是棧,我們需要先舉一個生活中的例子。BCp28資訊網——每日最新資訊28at.com

假如有一個又細又長的圓筒,圓筒一端封閉,另一端開口。往圓筒里放 入乒乓球,先放入的靠近圓筒底部,后放入的靠近圓筒入口。BCp28資訊網——每日最新資訊28at.com

BCp28資訊網——每日最新資訊28at.com

那么,要想取出這些乒乓球,則只能按照和放入順序相反的順序來取,先取出后放入的,再取出先放入的,而不可能把最里面最先放入的乒乓球優先取出。BCp28資訊網——每日最新資訊28at.com

棧(stack)是一種線性數據結構,它就像一個上圖所示的放入乒乓球的 圓筒容器,棧中的元素只能先入后出 (First In Last Out,簡稱FILO )。最早進入的元素存放的位置叫作棧底 (bottom),最后進入的元素 存放的位置叫作棧頂 (top)。BCp28資訊網——每日最新資訊28at.com

棧這種數據結構既可以用數組來實現,也可以用鏈表來實現。BCp28資訊網——每日最新資訊28at.com

棧的數組實現如下。BCp28資訊網——每日最新資訊28at.com

BCp28資訊網——每日最新資訊28at.com

棧的鏈表實現如下。BCp28資訊網——每日最新資訊28at.com

BCp28資訊網——每日最新資訊28at.com

那么,棧可以進行哪些操作呢?棧的最基本操作是入棧和出棧,下面讓我們來看一看。BCp28資訊網——每日最新資訊28at.com

棧的基本操作

入棧

入棧操作(push)就是把新元素放入棧中,只允許從棧頂一側放入元素,新元素的位置將會成為新的棧頂。BCp28資訊網——每日最新資訊28at.com

這里我們以數組實現為例。BCp28資訊網——每日最新資訊28at.com

BCp28資訊網——每日最新資訊28at.com

出棧

出棧操作(pop)就是把元素從棧中彈出,只有棧頂元素才允許出棧,出棧元素的前一個元素將會成為新的棧頂。BCp28資訊網——每日最新資訊28at.com

這里我們以數組實現為例。BCp28資訊網——每日最新資訊28at.com

BCp28資訊網——每日最新資訊28at.com

入棧和出棧操作,時間復雜度分別是多少?BCp28資訊網——每日最新資訊28at.com

入棧和出棧只會影響到最后一個元素,不涉及其他元素的整體移動,所以無論是以數組還是以鏈表實BCp28資訊網——每日最新資訊28at.com

現,入棧、出棧的時間復雜度都是O(1) 。BCp28資訊網——每日最新資訊28at.com

什么是單調棧

單調遞增棧 從棧底到棧頂的元素關鍵字的大小單調遞增;BCp28資訊網——每日最新資訊28at.com

單調遞減棧 從棧底到棧頂的元素關鍵字的大小單調遞減;BCp28資訊網——每日最新資訊28at.com

適用問題:BCp28資訊網——每日最新資訊28at.com

要知道單調棧的適用于解決什么樣的問題,我們首先需要知道單調棧的作用。單調棧分為單調遞增棧和單調遞減棧,通過使用單調棧我們可以訪問到下一個比他大(?。┑脑兀ɑ蛘哒f可以)。BCp28資訊網——每日最新資訊28at.com

也就是說在隊列或數組中,我們需要通過比較前后元素的大小關系來解決問題時我們通常使用單調棧。BCp28資訊網——每日最新資訊28at.com


BCp28資訊網——每日最新資訊28at.com

舉個栗子

有一個地方要傳授武林秘籍,大家要在這一天之前來這里排好隊等著學習武林秘籍。來了很多武林高手,但是這個地方的人要根據人來的先后順序教,先來的學的武功就高深,來的越靠后學的就越差,但是能保證只要來就能學到。假如他們一開始有一個初始的排隊順序和武力水平如下所示,大家可以按照這個初始順序從前往后學習。BCp28資訊網——每日最新資訊28at.com

BCp28資訊網——每日最新資訊28at.com

問題來了,武力值高的肯定愿意先學習到高深一點的武功啊,那我就找到前面武力值低的人說:“你別學了,我教你一門武功,然后離開,否則就咔嚓了你??”,武力值低的那聽就答應了也就只能無可奈何的打印了,從后來的那個人那里哪里學了一門武術就離開了,這樣武功高的那個就排在了前面。下面我們來從前往后模擬一下過程:BCp28資訊網——每日最新資訊28at.com

(1)首先來的是炮灰甲,炮灰甲一看,OK,棧內沒有人就可以先排在第一位BCp28資訊網——每日最新資訊28at.com

(2)然后掃地僧來了,掃地僧教給了炮灰甲一招易筋經,然后掃地僧讓炮灰甲離開自己排在第一位。BCp28資訊網——每日最新資訊28at.com

(3)然后楊過過來,看到前面是掃地僧,自己打不過只能老老實實站到隊里。BCp28資訊網——每日最新資訊28at.com

(4)后面一直來人(如3)------ 直到張三 對里面站的是 掃地僧 楊過 慕容復 張三 。BCp28資訊網——每日最新資訊28at.com

(5)然后張無忌來了,他首先看到前面是張三,張無忌教給張三一招武當梯云縱,然后讓張三離開了,張無忌再往前看到了慕容復教他一招太極拳,然后繼續直到遇到掃地僧,OK,自己打不過,老老實實的占到了后面 —現在隊里有掃地僧,張無忌 ----楊過,慕容復,張三的師傅為張無忌BCp28資訊網——每日最新資訊28at.com

(6)柯鎮惡來了,打不過,站到后面就好了。BCp28資訊網——每日最新資訊28at.com

(7)然后喬峰來了把柯鎮惡和張無忌打發走, —現在隊里有掃地僧,喬峰。BCp28資訊網——每日最新資訊28at.com

(8)然后李四來了,打不過喬峰,只能站到了最后。BCp28資訊網——每日最新資訊28at.com

(9)第二天掃地僧,喬峰,李四成功學到了武林秘籍BCp28資訊網——每日最新資訊28at.com

現在看他們分別學到武功對應如下圖:BCp28資訊網——每日最新資訊28at.com

BCp28資訊網——每日最新資訊28at.com

這樣我們就處理完了所有過程。因此單調棧的時間復雜度為O(n),在比較時對出棧的元素有一個處理(例如掃地僧讓炮灰甲走的時候教給他自己的武功),另外最后留在站內的元素有一個統一的處理(掃地僧,喬峰,李四成功學到了武林秘籍)。BCp28資訊網——每日最新資訊28at.com

偽代碼如下所示:BCp28資訊網——每日最新資訊28at.com

對于第i個到來的人:BCp28資訊網——每日最新資訊28at.com

  • 每當隊里面有人并且打不過自己的時候:
  • 讓這個人離開并交給他自己的武功
  • 自己入隊

LCR 039. 柱狀圖中最大的矩形

BCp28資訊網——每日最新資訊28at.com

思路:有了單調棧的基本認識,我們可以遍歷每根柱子,以當前柱子 i 的高度作為矩形的高,那么矩形的寬度邊界即為向左找到第一個高度小于當前柱體 i 的柱體,向右找到第一個高度小于當前柱體 i 的柱體。對于每個柱子我們都如上計算一遍以當前柱子作為高的矩形面積,最終比較出最大的矩形面積即可。BCp28資訊網——每日最新資訊28at.com

單調棧實現:尋找兩邊距離arr[i]最近且arr[i]小的索引,保持棧頂到棧底單調遞減,棧中存放索引值。BCp28資訊網——每日最新資訊28at.com

注意:頭0如果不添加,尋找左邊元素需要判斷棧是否為空;尾0如果不添加,需要重新寫一個循環彈出棧內元素。BCp28資訊網——每日最新資訊28at.com

class Solution {    public int largestRectangleArea(int[] heights) {        int n = heights.length;        int [] left = new int[n];        int [] right = new int[n];        Stack<Integer> stack = new Stack<>();        for(int i = 0; i < n; i++){            while (!stack.isEmpty() && heights[i] <= heights[stack.peek()]){                stack.pop();            }            left[i] = (stack.isEmpty() ? -1: stack.peek());            stack.push(i);        }        stack.clear();        for(int i = n-1; i >= 0; i--){            while (!stack.isEmpty() && heights[i] <= heights[stack.peek()]){                stack.pop();            }            right[i] = (stack.isEmpty() ? n : stack.peek());            stack.push(i);        }        int res = 0;        for(int i = 0; i < n; i++){            res = Math.max(res, (right[i] - left[i] - 1) * heights[i]);        }        return res;    }}

42.接雨水

該題目有多種解法,本次只介紹單調棧的方式,對其它算法感興趣的朋友可以自己去嘗試一下~~BCp28資訊網——每日最新資訊28at.com

思路:理解題目注意題目的性質,當后面的柱子高度比前面的低時,是無法接雨水的,當找到一根比前面高的柱子,就可以計算接到的雨水。所以使用單調遞減棧:BCp28資訊網——每日最新資訊28at.com

  • 對更低的柱子入棧,更低的柱子以為這后面如果能找到高柱子(可以理解為 代碼中的 left ),這里就能接到雨水,所以入棧把它保存起來。
  • 當出現高于棧頂(代碼中 top)的柱子時說明可以對前面的柱子結算了
class Solution {    public int trap(int[] height) {        int ans = 0;        Stack<Integer> stack = new Stack<Integer>();        int n = height.length;        for (int i = 0; i < n; ++i) {            while (!stack.isEmpty() && height[i] > height[stack.peek()]) {                int top = stack.pop();                if (stack.isEmpty()) {                    break;                }                int left = stack.peek();                int currWidth = i - left - 1;                int currHeight = Math.min(height[left], height[i]) - height[top];                ans += currWidth * currHeight;            }            stack.push(i);        }        return ans;    }}


BCp28資訊網——每日最新資訊28at.com

本文鏈接:http://m.rrqrq.com/showinfo-26-5102-0.html數組結構~什么是單調棧

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何優雅地處理RabbitMQ中的消息丟失

下一篇: 聊聊如何理解流量分發

標簽:
  • 熱門焦點
  • 中興AX5400Pro+上手體驗:再升級 雙2.5G網口+USB 3.0這次全都有

    2021年11月的時候,中興先后發布了兩款路由器產品,中興AX5400和中興AX5400 Pro,從產品命名上就不難看出這是隸屬于同一系列的,但在外觀設計上這兩款產品可以說是完全沒一點關系
  • 5月iOS設備性能榜:M1 M2依舊是榜單前五

    和上個月一樣,沒有新品發布的iOS設備性能榜的上榜設備并沒有什么更替,僅僅只有跑分變化而產生的排名變動,剛剛開始的蘋果WWDC2023,推出的產品也依舊是新款Mac Pro、新款Mac Stu
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 量化指標是與非:挽救被量化指標扼殺的技術團隊

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術總監劉新翠在WOT2023大會上的主題分享,更多精彩內容及現場PPT,請關注51CTO技術棧公眾號,發消息【WOT2023PPT】即可直接領取
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛?,F在,我們就開始今
  • 小紅書1周漲粉49W+,我總結了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人&ldquo;珍藏&rdquo;是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • Meta盲目擴張致超萬人被裁,重金押注元宇宙而前景未明

    圖片來源:圖蟲創意日前,Meta創始人兼CEO 馬克&middot;扎克伯發布公開信,宣布Meta計劃裁員超11000人,占其員工總數13%。他公開承認了自己的預判失誤:&ldquo;不僅
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
欧美日一区二区在线观看 | 国产伦精品一区二区三区| 欧美日韩一区二区三区在线看| 免费看日韩精品| 国产精品美女| 国产视频一区二区在线观看| 国产福利一区二区| 亚洲一区二区在线看| 久久综合中文字幕| 精品一区二区影视| 国产欧美激情| 亚洲欧美视频在线观看| 成人爽a毛片一区二区免费| 欧美色网站导航| 亚洲精品久久久蜜桃| 日本不卡不码高清免费观看| 久久精品电影| 中文字幕亚洲成人| 欧美午夜一区二区福利视频| 91精品黄色片免费大全| 精品午夜一区二区三区在线观看| 国产一区二区久久久| 国产精品视频一区二区三区不卡| 99久久精品国产观看| 欧美精品国产精品| 国产精华液一区二区三区| 色哟哟精品一区| 国产精品色哟哟| 一区福利视频| 国产精品视频yy9299一区| 欧美天天视频| 国产欧美一区二区三区在线看蜜臀 | 免费在线成人av| 亚洲午夜一区二区三区| 亚洲成色最大综合在线| 欧美一区二区视频免费观看| 丁香桃色午夜亚洲一区二区三区| 欧美日韩一区二区三区视频| 日韩国产一二三区| 色哟哟国产精品免费观看| 亚洲综合精品自拍| 91极品视觉盛宴| 日韩二区三区在线观看| 亚洲人成人一区二区三区| 亚洲综合成人在线视频| 在线视频免费在线观看一区二区| 26uuu国产在线精品一区二区| 成人高清视频在线| 欧美日韩视频在线观看一区二区三区| 免费av成人在线| 精品视频999| 日韩成人一区二区三区在线观看| 久久久久久久久一区二区| 日韩精品成人一区二区在线| 亚洲乱码视频| 蜜臀99久久精品久久久久久软件 | 国产一区二区三区日韩| 欧美一三区三区四区免费在线看| 国产高清精品在线| 国产精品麻豆欧美日韩ww| 亚洲精品日韩久久| 日本亚洲一区二区| 欧美日韩aaaaaa| 91蜜桃传媒精品久久久一区二区| 国产精品国产三级国产普通话99| 亚洲天堂偷拍| 久久se这里有精品| 日韩欧美高清dvd碟片| 在线成人www免费观看视频| 亚洲一区二区三区在线| 日韩一级免费一区| 91丝袜美腿高跟国产极品老师| 国产欧美日韩另类一区| 一区二区高清| 免费观看91视频大全| 国产女主播视频一区二区| 亚洲精品自在在线观看| 狠狠色丁香久久婷婷综合_中| 精品少妇一区二区| 欧美亚洲网站| 国产乱子轮精品视频| 久久伊人蜜桃av一区二区| 亚洲国产精品一区二区第一页| 日韩专区中文字幕一区二区| 欧美精品一区二区三区视频| 亚洲精品久久久久久一区二区| 国模一区二区三区白浆| 久久久精品免费网站| 在线欧美日韩精品| 97久久久精品综合88久久| 亚洲va天堂va国产va久| 日韩欧美www| k8久久久一区二区三区| 日日欢夜夜爽一区| 国产午夜精品久久久久久免费视| 一本到不卡精品视频在线观看| 成人午夜在线播放| 婷婷国产在线综合| 精品国产一区久久| 欧美中文字幕一区二区三区亚洲| 91年精品国产| 婷婷六月综合网| 国产欧美一区二区三区鸳鸯浴 | 国产精品一区在线| 一区二区三区丝袜| 久久久久久夜精品精品免费| 亚洲自拍另类| 国内揄拍国内精品久久| 久久福利视频一区二区| 一区二区三区产品免费精品久久75| 欧美美女激情18p| 国产午夜久久| 99视频一区二区| 亚洲激情综合网| 中文字幕第一区综合| 欧美精品国产精品| 欧美在线观看视频一区二区三区| 91论坛在线播放| 成人午夜激情影院| 视频一区中文字幕| 亚洲综合一区二区三区| 久久久久久一级片| 日韩一级黄色片| 久久亚洲高清| 午夜天堂精品久久久久| 美女网站色91| 亚洲午夜精品久久久久久久久| 91福利社在线观看| 国产精品色网| 国产成人精品一区二| 国产一区二区h| 日日夜夜精品视频天天综合网| 亚洲一区二区视频| 中文字幕在线观看不卡视频| 国产精品污www在线观看| 日韩精品一区二区三区在线播放| 欧美精品色一区二区三区| 麻豆91精品| 色综合激情久久| 免播放器亚洲| 色诱亚洲精品久久久久久| 亚洲乱码久久| 午夜影院日韩| av不卡免费看| 翔田千里一区二区| 99热在线精品观看| 亚洲一区二区三区高清| 在线欧美不卡| 欧美fxxxxxx另类| 99久久综合狠狠综合久久| 九色综合国产一区二区三区| 日韩高清一级片| 中文字幕第一区第二区| 玉米视频成人免费看| 久久久亚洲精华液精华液精华液| 国产人成一区二区三区影院| 欧美精品一区二区三区四区 | 日韩一级免费观看| 日韩欧美的一区二区| 国产视频一区不卡| 久久九九99视频| 亚洲精选在线视频| 亚洲激情六月丁香| 免费在线观看日韩欧美| 日韩中文字幕一区二区三区| 久久99久久99| 国产精品亚洲成人| 欧美久久久久久久| 伊甸园精品99久久久久久| 亚洲一区二区网站| 久久久久国产精品午夜一区| 欧美丰满美乳xxx高潮www| 欧美理论电影在线| 国产午夜亚洲精品不卡| 国产精品美女久久久久aⅴ| 亚洲高清免费在线| 日本在线观看不卡视频| 成人午夜av电影| 91理论电影在线观看| 国产精品视区| 在线观看一区二区精品视频| 精品少妇一区二区三区视频免付费 | 亚洲精品社区| 亚洲精品一区二区三区av| 性一交一乱一区二区洋洋av| 日本丰满少妇一区二区三区| 欧美电视剧免费全集观看| 久久精品一区蜜桃臀影院| 亚洲第一激情av| 麻豆精品久久精品色综合| 91一区二区在线观看| 尤物精品在线| 欧美日韩国产不卡| 精品国产一区二区亚洲人成毛片| 樱花草国产18久久久久| 奇米一区二区三区av| 欧美1区视频| 国产精品日韩欧美一区二区| 欧美成人一区二区三区| 亚洲欧洲在线观看av|