代碼隨想錄算法訓練營第四十二四十三天

LeetCode/卡碼網題目:

  • 42. 接雨水
  • 84. 柱狀圖中最大的矩形
  • 98. 所有可達路徑

其他:

今日總結
往期打卡


42. 接雨水

跳轉: 42. 接雨水

學習: 代碼隨想錄公開講解

問題:

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之后能接多少雨水。
在這里插入圖片描述

思路:

單調棧的思路是只有遇到遞增時才有可能能兜住雨水
單調棧中記錄好右邊界(填充邊界之間的元素),如果當前柱子大于棧頂右邊界,就要用棧中前一個邊界或當前柱子中最小的那個填充洼地.
如果沒有前一個邊界,那么就說明前面都是已經填過的更小的值,兜不住雨水.

遍歷時一共有三種情況:
棧為空或當前比棧頂小
當前和棧頂一樣
當前大于棧頂
一樣就要更新右邊界,大于就開始出棧并填充

復雜度:

  • 時間復雜度: O ( n ) O(n) O(n)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼:

class Solution {public int trap(int[] height) {Deque<Integer> stack = new LinkedList<>();int ans = 0;for(int i=0;i<height.length;i++){if(!stack.isEmpty()){if(height[stack.peekLast()]==height[i]){stack.pollLast();}else if(height[stack.peekLast()]<height[i]){do{int mid = stack.pollLast();if(!stack.isEmpty()){int h = Math.min(height[stack.peekLast()],height[i])-height[mid];int w = i - stack.peekLast()-1;ans+=h*w;}}while(!stack.isEmpty()&&height[stack.peekLast()]<height[i]);}}stack.add(i);}return ans;}
}

84. 柱狀圖中最大的矩形

跳轉: 84. 柱狀圖中最大的矩形

學習: 代碼隨想錄公開講解

問題:

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

在這里插入圖片描述

思路:

如果遞減,就開始計算前面一直到和自己等高那一塊兒里的最大矩形.
再往后的計算不會和比當前元素高的部分合并,所以去掉的部分都會被看作當前元素.
為了讓最小的元素能從0算到i-1,需要在最開始加一個高度為0的最小的柱子(哪怕被更新了0高度本來也是不需要計算的)
最后一個元素添加完后形成的遞增棧也需要計算,可以從尾部再加一個為0的元素,將剩余可選矩陣全部計算求最大值

復雜度:

  • 時間復雜度: O ( n ) O(n) O(n)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼:

class Solution {public int largestRectangleArea(int[] height) {Deque<Integer> stack = new LinkedList<>();int n = height.length+2;int[] heights = new int[n];System.arraycopy(height, 0, heights, 1, height.length);int ans = 0;stack.add(0);for(int i=1;i<n;i++){if(heights[i]>heights[stack.peekLast()]){stack.add(i);}else if(heights[i]==heights[stack.peekLast()]){stack.pollLast();stack.add(i);}else{while(!stack.isEmpty()&&heights[i]<=heights[stack.peekLast()]){int mid = stack.pollLast();if(!stack.isEmpty()){int w = i-stack.peekLast()-1;int h = heights[mid];ans = Math.max(ans,w*h);}}stack.add(i);}}return ans;}
}

98. 所有可達路徑

跳轉: 98. 所有可達路徑

學習: 代碼隨想錄公開講解

問題:

給定一個有 n 個節點的有向無環圖,節點編號從 1 到 n。請編寫一個函數,找出并返回所有從節點 1 到節點 n 的路徑。每條路徑應以節點編號的列表形式表示。

思路:

從1開始,dfs深搜路徑,回溯,結束條件是到達n,題目中說明了不會有平行邊和自環,所以深度有限不用擔心爆棧.
使用動態數組構造有向圖的鄰接矩陣,比使用基本數組要節省空間

復雜度:

  • 時間復雜度: O ( m ) O(m) O(m)
  • 空間復雜度: O ( m ) O(m) O(m)

代碼:

import java.util.*;class Main {static List<Integer>[] lists;static ArrayList<Integer> path = new ArrayList<>();static boolean flag = true;static void dfs(int start) {if(start==lists.length-1){flag = false;System.out.print(1);for(int i=0;i<path.size();i++){System.out.print(" "+path.get(i));}System.out.println("");return;}for(int i:lists[start]){path.add(i);dfs(i);path.remove(path.size()-1);}}public static void main(String[] args) {Scanner in = new Scanner(System.in);int N = in.nextInt();int M = in.nextInt();lists = new List[N + 1];for (int i = 0; i <= N; i++) {lists[i] = new ArrayList<>();}for (int i = 0; i < M; i++) {int x = in.nextInt();int y = in.nextInt();lists[x].add(y);}dfs(1);if(flag) System.out.println(-1);}
}

總結

練習了單調棧和DFS

往期打卡

代碼隨想錄算法訓練營第四十一天

代碼隨想錄算法訓練營第四十天

代碼隨想錄算法訓練營第三十九天

代碼隨想錄算法訓練營第三十八天

代碼隨想錄算法訓練營第三十七天

代碼隨想錄算法訓練營第三十五&三十六天

代碼隨想錄算法訓練營第三十四天

代碼隨想錄算法訓練營第三十三天(補)

代碼隨想錄算法訓練營第三十二天

代碼隨想錄算法訓練營第三十一天

代碼隨想錄算法訓練營第三十天(補)

代碼隨想錄算法訓練營第二十九天

代碼隨想錄算法訓練營第二十八天

代碼隨想錄算法訓練營第二十七天(補)

代碼隨想錄算法訓練營第二十六天

代碼隨想錄算法訓練營第二十五天

代碼隨想錄算法訓練營第二十四天

代碼隨想錄算法訓練營第二十三天

代碼隨想錄算法訓練營周末四

代碼隨想錄算法訓練營第二十二天(補)

代碼隨想錄算法訓練營第二十一天

代碼隨想錄算法訓練營第二十天

代碼隨想錄算法訓練營第十九天

代碼隨想錄算法訓練營第十八天

代碼隨想錄算法訓練營第十七天

代碼隨想錄算法訓練營周末三

代碼隨想錄算法訓練營第十六天

代碼隨想錄算法訓練營第十五天

代碼隨想錄算法訓練營第十四天

代碼隨想錄算法訓練營第十三天

代碼隨想錄算法訓練營第十二天

代碼隨想錄算法訓練營第十一天

代碼隨想錄算法訓練營周末二

代碼隨想錄算法訓練營第十天

代碼隨想錄算法訓練營第九天

代碼隨想錄算法訓練營第八天

代碼隨想錄算法訓練營第七天

代碼隨想錄算法訓練營第六天

代碼隨想錄算法訓練營第五天

代碼隨想錄算法訓練營周末一

代碼隨想錄算法訓練營第四天

代碼隨想錄算法訓練營第三天

代碼隨想錄算法訓練營第二天

代碼隨想錄算法訓練營第一天

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

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

相關文章

SEO 優化實戰:ZKmall模板商城的 B2C商城的 URL 重構與結構化數據

在搜索引擎算法日益復雜的今天&#xff0c;B2C商城想要在海量信息中脫穎而出&#xff0c;僅靠優質商品和營銷活動遠遠不夠。ZKmall模板商城以實戰為導向&#xff0c;通過URL 重構與結構化數據優化兩大核心策略&#xff0c;幫助 B2C 商城實現從底層架構到搜索展示的全面升級&…

Linux自有服務

自有服務概述 概述 自有服務&#xff0c;即不需要用戶獨立去安裝的軟件的服務&#xff0c;而是當系統安裝好之后就可以直接使用的服務&#xff08;內置&#xff09; 顯示服務 顯示服務 命令&#xff1a;systemctl \[選項] 選項參數 list-units --type service --all&#x…

ZYNQ Overlay硬件庫使用指南:用Python玩轉FPGA加速

在傳統的FPGA開發中,硬件設計需要掌握Verilog/VHDL等硬件描述語言,這對軟件開發者而言門檻較高。Xilinx的PYNQ框架通過Overlay硬件庫徹底改變了這一現狀——開發者只需調用Python API即可控制FPGA的硬件模塊,實現硬件加速與靈活配置。本文將深入探討ZYNQ Overlay的核心概念、…

JavaScript入門【1】概述

1.JavaScript是什么? <font style"color:rgb(38,38,38);">Javascript &#xff08;簡稱“JS”&#xff09;是?種直譯式腳本語?&#xff0c;?段腳本其實就是?系列指令&#xff0c;計算機通過這些指令來達成?標。它?是?種動態類型的編程語?。JS?來在?…

c++從入門到精通(五)--異常處理,命名空間,多繼承與虛繼承

異常處理 棧展開過程&#xff1a; 棧展開過程沿著嵌套函數的調用鏈不斷查找&#xff0c;直到找到了與異常匹配的catch子句為止&#xff1b;也可能一直沒找到匹配的catch&#xff0c;則退出主函數后查找過程終止。棧展開過程中的對象被自動銷毀。 在棧展開的過程中&#xff0c…

自適應稀疏核卷積網絡:一種高效靈活的圖像處理方案

自適應稀疏核卷積網絡&#xff1a;一種高效靈活的圖像處理方案 引言 在深度學習的大潮中&#xff0c;計算機視覺技術取得了長足的進步。其中&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;作為圖像處理的核心工具&#xff0c;極大地推動了各類圖像識別任務的效果提升。…

Nginx:利用 FreeSSL 申請(Https)免費證書的技術指南

1、簡述 在現代互聯網應用中,使用 HTTPS 連接是確保數據傳輸安全的基本需求。SSL/TLS 證書能夠加密客戶端與服務器之間的通信,防止中間人攻擊等安全隱患。而許多開發者和小型企業可能會擔心 SSL 證書的費用問題。幸運的是,FreeSSL 提供了一個簡單易用的平臺,允許我們申請免…

自定義庫模塊增加自定義許可操作詳細方法

自定義庫模塊增加自定義許可操作詳細方法 用到的工具: 后面程序用到的所有代碼均是該工具生成的秘密&#xff01;&#xff01;&#xff01;&#xff01; 【切記切記&#xff01;&#xff01;&#xff01; 一定要記住密碼&#xff0c;不然如果你想將庫的許可認證移除&#xf…

python的漫畫網站管理系統

目錄 技術棧介紹具體實現截圖![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/0ed2084038144499a162b3fb731a5f37.png)![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/a76a091066f74a80bf7ac1be489ae8a8.png)系統設計研究方法&#xff1a;設計步驟設計流程核…

Python循環性腳本實踐要點:打造穩定高效的定時任務

在Python開發中&#xff0c;循環性腳本&#xff08;長時間運行并定期執行任務的腳本&#xff09;非常常見&#xff0c;比如監控系統、數據采集程序、定時清理任務等。這類腳本雖然看似簡單&#xff0c;但實際開發中容易遇到各種陷阱。本文將分享六大核心實踐要點&#xff0c;幫…

編程基礎:什么是變量

文章目錄 變量&#xff1a;雙要素變量必須代表一個意義&#xff1a;編程不需要無意義的變量。只要是變量&#xff0c;都需要有一個意義。變量必須要有不同的值&#xff1a;編程不需要只有一個值的變量。只要是變量&#xff0c;都需要有不同的值。 雙要素少一個都不是變量即看見…

利用SenseGlove觸覺手套開發XR手術訓練體驗

VirtualiSurg和VR觸覺 作為領先的培訓平臺&#xff0c;VirtualiSurg自2017年以來一直利用擴展現實 (XR) 和觸覺技術&#xff0c;為全球醫療保健行業提供個性化、數據驅動的學習解決方案。該平臺賦能醫療專業人員進行協作式學習和培訓&#xff0c;提升他們的技能&#xff0c;使…

【記錄】Windows|豎屏怎么調整分辨率使橫豎雙屏互動鼠標絲滑

本文版本&#xff1a;Windows11&#xff0c;記錄一下&#xff0c;我最后調整的比較舒適的分辨率是800*1280。 文章目錄 第一步 回到桌面第二步 右鍵桌面第三步 設置橫屏為主顯示器第四步 調整分辨率使之符合你的需求第五步 勾選輕松在顯示器之間移動光標第六步 拖動屏幕符合物理…

手機打電話時如何將通話對方的聲音在手機上識別成文字

手機打電話時如何將通話對方的聲音在手機上識別成文字 --本地AI電話機器人 上一篇&#xff1a;手機打電話時由對方DTMF響應切換多級IVR語音應答&#xff08;一&#xff09; 下一篇&#xff1a;手機打電話時由對方DTMF響應切換多級IVR語音應答&#xff08;二&#xff09; 一、…

uniapp-商城-61-后臺 新增商品(添加商品到數據庫)

完成商品的布局&#xff0c;完成商品的屬性添加&#xff0c;最后的目的還是要完成數據添加&#xff0c;將我們前臺的數據添加后臺的數據庫。 1、界面 2、點擊提交完成商品添加 點擊下方的提交按鈕&#xff0c;將數據添加到數據庫。 onSubmit 使用該函數---見3 <view cla…

A級、B級弱電機房數據中心建設運營匯報方案

該方案圍繞A 級、B 級弱電機房數據中心建設與運營展開,依據《數據中心設計規范》等標準,施工范圍涵蓋 10 類機房及配套設施,采用專業化施工團隊與物資調配體系,強調標簽規范、線纜隱藏等細節管理。運營階段建立三方協同運維模式,針對三級故障制定30 分鐘至 1 小時響應機制…

RAG數據處理:PDF/HTML

RAG而言用戶輸入的數據通常是各種各樣文檔&#xff0c;本文主要采用langchain實現PDF/HTML文檔的處理方法 PDF文檔解析 PDF文檔很常見格式&#xff0c;但內部結構常常較復雜&#xff1a; 復雜的版式布局多樣的元素&#xff08;段落、表格、公式、圖片等&#xff09;文本流無…

時源芯微| KY鍵盤接口靜電浪涌防護方案

KY鍵盤接口靜電浪涌防護方案通過集成ESD保護元件、電阻和連接鍵&#xff0c;形成了一道有效的防護屏障。當鍵盤接口受到靜電放電或其他浪涌沖擊時&#xff0c;該方案能夠迅速將過電壓和過電流引導至地&#xff0c;從而保護后續電路免受損害。 ESD保護元件是方案中的核心部分&a…

Java 原生網絡編程(BIO | NIO | Reactor 模式)

1、基本常識 Socket 是應用層與 TCP/IP 協議族通信的中間軟件抽象層&#xff0c;是一組接口&#xff0c;使用了門面模式對應用層隱藏了傳輸層以下的實現細節。TCP 用主機的 IP 地址加上主機端口號作為 TCP 連接的端點&#xff0c;該端點叫做套接字 Socket。 比如三次握手&…

OpenCV透視變換

概念 OpenCV 透視變換是將圖像從一個視平面投影到另一個視平面的過程&#xff0c;也叫投影映射 &#xff0c;屬于空間立體三維變換。它基于透視原理&#xff0c;通過 33 的變換矩陣作用于圖像像素坐標來實現映射轉換 &#xff0c;能模擬人眼或相機鏡頭觀看三維空間物體時的透視…