leetcode 熱題 100_接雨水

題解一:

? ? ? ? 按列求:分別考慮每一列的雨水高度,某列的雨水高度只與其左側最高墻和右側最高墻有關,一種情況是該列比左右側的墻都低,則根據木桶效應該列雨水高度為min(左側墻高,右側墻高)-列高,而其余情況該列均無法接住雨水。找左右側最高墻時可以用動態規劃進行優化,對于第n列,左側最高墻為max(第n-1列的左側最高墻,第n-1列高度),右側最高墻為max(第n+1列的右側最高墻,第n+1列高度),最后將每列的雨水高度相加即可。

class Solution {public int trap(int[] height) {int len = height.length;int water = 0;int[] left = new int[len];int[] right = new int[len];left[0] = 0;right[len - 1] = 0;for (int i = 1; i < len; i++) {left[i] = Math.max(left[i - 1], height[i - 1]);}for (int i = len - 2; i >= 0; i--) {right[i] = Math.max(right[i + 1], height[i + 1]);}for (int i = 1; i < len - 1; i++) {if (height[i] < left[i] && height[i] < right[i]) water += Math.min(left[i], right[i]) - height[i];}return water;}
}

題解二:

? ? ? ? 單調棧:由于只有凹型結構可以接住雨水,因此我們可以找出高度圖中的所有凹型結構,計算接住雨水的量總和。我們利用單調棧來求解,要滿足凹型結構則需要至少三根柱子,并且高度呈先遞減后遞增的趨勢。遍歷數組依次入棧,如果是遞減結構則繼續入棧,如果出現遞增,則判斷是否滿足凹型結構(棧中至少有兩個元素),如果不滿足則說明只能形成兩根遞增結構的柱子,此時將左柱子出棧,如果滿足則根據水桶效應計算三個柱子能接住的雨水量,并將中部柱子出棧。以下是官方給出的動畫演示(來源. - 力扣(LeetCode))

import java.util.Stack;class Solution {public int trap(int[] height) {int len = height.length;Stack<Integer> stack = new Stack<>();int water = 0;for (int i = 0; i < len; i++) {while (!stack.isEmpty() && height[i] > height[stack.peek()]) {int temp = stack.pop();if (stack.isEmpty()) break;else {int left = stack.peek();water += (i - left - 1) * (Math.min(height[i], height[left]) - height[temp]);}}stack.push(i);}return water;}
}

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

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

相關文章

智能駕駛及相關零部件攝像頭毫米波雷達激光雷達和芯片滲透率

一、總體情況 乘聯會數據顯示&#xff0c;1月1日至1月28日&#xff0c;全國乘用車廠商新能源車批發銷量為56.7萬輛&#xff0c;同比增長76%&#xff0c;環比下降38%&#xff1b;國內新能源車市場零售銷量為59.6萬輛&#xff0c;同比增長92%&#xff0c;環比下降24%。 二、銷…

考研總計劃(基礎篇)

分為數學&#xff0c;專業課&#xff0c;英語三個部分 數學規劃表 高數基礎&#xff1a;3月初到4月15號 具體實行計劃&#xff1a;分為看課日和寫題日 看課日:早上10點到12點半看課&#xff0c;19:30到21:30繼續看課。 寫題日:早上10點到12點半復習前一天的題目&#xff0…

【word】引用文獻如何標注右上角

一、在Word文檔中引用文獻并標注在右上角的具體步驟如下 1、將光標移動到需要添加文獻標注的位置&#xff1a; 2、在文檔上方的工具欄中選擇“引用”選項&#xff1a; 3、點擊“插入腳注”或“插入尾注”&#xff1a; ①如果選擇的是腳注&#xff0c;則腳注區域會出現在本頁的…

多路轉接之epoll

常用的三個API&#xff1a; epoll_create(); //例如 int epfd epoll(10);創建一棵有10個結點的紅黑樹&#xff0c;注意&#xff1a;這個數只是對內核建議的數值&#xff0c;內核參照這個參數去構建epoll_ctrl();//參數2 op可以取值 EPOLL_CTL_ADD/MOD/DELevents:EPOLLIN/…

Professor教誨-學術筆記1

關于指導學生 自己帶的學生&#xff0c;要把文章從頭到尾檢查好了&#xff0c;再發給professor要至少留給professor一周的時間改文章&#xff0c;太遲了不如放棄DDL要在合作中&#xff0c;充分尊重合作者認真對待向別人求推薦信這件事&#xff0c;別人找你推薦也要慎重&#x…

成為大佬之路--linux軟件安裝使用第000000025篇--linux docker安裝mysql

安裝 1.拉取鏡像 docker pull centos/mysql-57-centos7 2.啟動mysql docker run -di --nametensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 centos/mysql-57-centos7

Pyglet圖形界面版2048游戲——詳盡實現教程(上)

目錄 Pyglet圖形界面版2048游戲 一、色塊展示 二、繪制標題 三、方陣色塊 四、界面布局 五、鍵鼠操作 Pyglet圖形界面版2048游戲 一、色塊展示 準備好游戲數字的背景顏色&#xff0c;如以下12種&#xff1a; COLOR ((206, 194, 180, 255), (237, 229, 218, 255), (23…

常見Vue原理面試題

1. Vue的響應式原理是什么&#xff1f;請詳細說明Object.defineProperty()和Proxy的區別和用法。 響應式原理&#xff1a;Vue中采用了數據劫持的方式&#xff0c;通過Object.defineProperty()函數來監聽數據變化&#xff0c;并在數據變化時觸發對應的更新函數。 Object.define…

SpringCloud負載均衡源碼解析 | 帶你從表層一步步剖析Ribbon組件如何實現負載均衡功能

目錄 1、負載均衡原理 2、源碼分析 2.1、LoadBalanced 2.2、LoadBalancerClient 2.3、RibbonAutoConfiguration 2.4、LoadBalancerAutoConfiguration 2.5、LoadBalancerIntercepor? 2.6、再回LoadBalancerClient 2.7、RibbonLoadBalancerClient 2.7.1、DynamicServe…

OpenCV 4基礎篇| OpenCV圖像的拼接

目錄 1. Numpy (np.hstack&#xff0c;np.vstack)1.1 注意事項1.2 代碼示例 2. matplotlib2.1 注意事項2.2 代碼示例 3. 擴展示例&#xff1a;多張小圖合并成一張大圖4. 總結 1. Numpy (np.hstack&#xff0c;np.vstack) 語法結構&#xff1a; retval np.hstack(tup) # 水平…

工作日記:JavaScript fill() 方法

定義 fill() 方法用于將一個固定值替換數組的元素。 語法 array.fill(value, start, end) value&#xff1a;必填。要填充的值 start&#xff1a;可選。開始填充位置 end&#xff1a;可選。結束填充位置&#xff08;默認是數組的長度&#xff1a;array.length&#xff09;…

提取拼多多店鋪商家電話的爬蟲軟件

拼多多是中國知名的團購電商平臺&#xff0c;許多用戶在購物時都希望能夠直接聯系到店鋪商家&#xff0c;以便獲得更多的產品信息或解決問題。在這篇文章中&#xff0c;我們將介紹如何使用Python編寫一個爬蟲軟件&#xff0c;來提取拼多多店鋪商家電話。 首先&#xff0c;我們…

c++之通訊錄管理系統

1&#xff0c;系統需求 通訊錄是一個記錄親人&#xff0c;好友信息的工具 系統中需要實現的功能如下&#xff1a; 1&#xff0c;添加聯系人&#xff1a;向通訊錄中添加新人&#xff0c;信息包括&#xff08;姓名&#xff0c;性別&#xff0c;年齡&#xff0c;聯系電話&#…

構建高效的接口自動化測試框架思路

在選擇接口測試自動化框架時&#xff0c;需要根據團隊的技術棧和項目需求來綜合考慮。對于測試團隊來說&#xff0c;使用Python相關的測試框架更為便捷。無論選擇哪種框架&#xff0c;重要的是確保 框架功能完備&#xff0c;易于維護和擴展&#xff0c;提高測試效率和準確性。今…

IntelliJ IDEA 的常用快捷鍵

IntelliJ IDEA 的常用快捷鍵非常多&#xff0c;這些快捷鍵可以幫助你更高效地編寫代碼。以下是一些常用的快捷鍵總結&#xff1a; 基礎操作 CtrlN&#xff1a;查找類CtrlShiftN&#xff1a;查找文件CtrlAltL&#xff1a;格式化代碼AltInsert&#xff1a;生成代碼&#xff08;…

信息安全技術第1章——信息網絡安全基本概念

課程介紹 網絡信息安全是醫學信息工程專業的限選課。主要圍繞計算機網絡安全所涉及的主要問題進行講解&#xff0c;內容包括&#xff1a;對稱密碼與公鑰密碼的基本原理、相關算法及應用。電子郵件的安全&#xff0c;IP安全&#xff0c;Web安全&#xff0c;惡意軟件及防火墻等內…

UI自動化-(web端窗口截圖文件上傳-實操入門)

1、窗口截圖 1. UI自動化中&#xff0c;為什么需要進行窗口截圖&#xff1f; 調試和故障排除&#xff1a;截圖可以直觀地查看界面的狀態&#xff0c;快速識別和解決問題。當自動化過程中出現錯誤或異常時&#xff0c;通過查看截圖可以確定是否是界面元素的問題&#xff0c;例…

C++ opencv 學習

文章目錄 1、創建窗口2、讀取圖片3、視頻采集4、Mat的使用5、異或操作6、通道分離&#xff0c;通道合并7、色彩空間轉換8、最大值、最小值9、繪制圖像10、多邊形繪制11、隨機數12、鼠標實時繪制矩形13、歸一化14、resize操作15、旋轉翻轉16、視頻操作17、模糊操作18、高斯模糊操…

SpringBoot整合MyBatis實現增刪改查

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人???? ??個人主頁:Leo的博客 ??當前專欄: 循序漸進學SpringBoot ?特色專欄: MySQL學習 ??本文內容: SpringBoot整合MyBatis實現增刪改查 ??個人知識庫: Leo知識庫,歡迎大家訪…

mysql之 case when

1 簡單 case 函數&#xff0c;IF函數 格式&#xff1a; CASE input_expression WHEN when_expression THENresult_expression [...n ] [ ELSEelse_result_expression ENDIF(條件,True結果,False結果)2 條件表達式 可嵌套多層&#xff0c;類似于 if … else if … else … end…