【力扣熱題100】雙指針—— 接雨水

題目

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

注意:答案中不可以包含重復的三元組。

輸入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
輸出:6
解釋:上面是由數組 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度圖,在這種情況下,可以接 6 個單位的雨水(藍色部分表示雨水)。

在這里插入圖片描述

輸入:height = [4,2,0,3,2,5]
輸出:9

鏈接:[https://leetcode.cn/problems/3sum/description/?envType=study-plan-v2&envId=top-100-liked)

思路

思路一(超時)

暴力:對于每個位置,找到左右最高的高度,計算當前位置的雨水,加和。O(N2)會超時

思路二

在暴力的基礎上進行優化,先遍歷一遍提前知道每個位置左右最高高度,然后對于每個位置,計算當前位置的雨水,加和。O(N)

class Solution {public int trap(int[] height) {int sum = 0;int[] max_left = new int[height.length];int[] max_right = new int[height.length];// 提前知道每個位置左右最高高度for (int i = 1; i < height.length - 1; i++) {max_left[i] = Math.max(max_left[i - 1], height[i - 1]);}for (int i = height.length - 2; i >= 0; i--) {max_right[i] = Math.max(max_right[i + 1], height[i + 1]);}// 計算當前位置盛水量for (int i = 1; i < height.length - 1; i++) {int min = Math.min(max_left[i], max_right[i]);if (min > height[i]) {sum = sum + (min - height[i]);}}return sum;}
}

思路三

在思路二的基礎上繼續優化,在遍歷的過程中就知道左右最高高度,從而節省空間復雜度。
一個位置能盛放的雨水量,是由當前位置和**左右最高高度中較小的高度決定的。**因此,雙指針從頭尾進行遍歷,每次移動較矮的。在移動的過程中記錄水量。

class Solution {public int trap(int[] height) {int leftMax = height[0];int rightMax = height[height.length-1];int left = 0;int right = height.length-1;int sum = 0;while (left < right) {if (height[left] < height[right]) {leftMax = Math.max(leftMax, height[left]);sum = sum + leftMax - height[left];left++;} else {rightMax = Math.max(rightMax, height[right]);sum = sum + rightMax - height[right];right--;}}return sum;}
}

思路四(超時)

首先找到最高的高度max,在實際下雨的過程中,首先高度為1的地方都是水,然后是高度為2的地方都是水,依次到高度為max的地方。
那么對于當前的高度i,找到最左和最右高度為i的位置left和right。那么在這中間的這段區域都可能有水,比較每個位置的高度和i的關系即可,滿足則總水量+1。

class Solution {public int trap(int[] height) {int max = 0;for (int i = 0; i < height.length; i++) {max = Math.max(height[i], max);}int result = 0;for (int i = 1; i <= max; i++) {int left = 0;int right = height.length -1;while (left < right) {if (height[left] < i) {left++;} else if (height[right] < i) {right--;} else {for (int j = left+1; j < right; j++) {if (height[j] < i) {result++;}}break;}}}return result;}
}

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

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

相關文章

51單片機拼接板(開發板積木)

一、前言 1.1 背景 讀書那會兒&#xff08;2013年左右&#xff09;網上接了很多51單片機的設計。 當時有個痛點: 每張板子都是定制的&#xff0c;畫板子&#xff0c;打樣&#xff0c;寫代碼需要花費很多時間。 希望有一張板子&#xff0c;能夠實現絕大多數單片機的功能&#xf…

使用segment-anything將目標檢測label轉換為語義分割label

使用segment-anything將目標檢測label轉換為語義分割label一、segment-anything簡介二、segment-anything安裝2.1安裝方法2.2預訓練模型下載三、將目標檢測label轉換為語義分割label3.1示例代碼3.2代碼說明一、segment-anything簡介 segment-anything是facebookresearch團隊開…

【unitrix數間混合計算】3.3 無符號整數標記trait(bin_unsigned.rs)

一、源碼 這段代碼是用 Rust 語言實現的一個類型級無符號二進制整數系統&#xff0c;通過類型系統在編譯時表示和操作二進制數字。這是一種典型的"類型級編程"&#xff08;type-level programming&#xff09;技術。 use crate::number::{U0, Bin, Bit, BinInt};/// …

Python基本語法總結

1.類&#xff08;Class&#xff09;在Python中類&#xff08;Class&#xff09;是面向對象編程&#xff08;OOP&#xff09;的核心概念。1.1.類的基本定義最簡單的類class Cat:"""這是一個最簡單的類"""pass #創建實例 obj Cat()包含方法的類cl…

數據結構05(Java)-- ( 歸并排序實質,歸并排序擴展問題:小和問題)

前言 本文為本小白&#x1f92f;學習數據結構的筆記&#xff0c;將以算法題為導向&#xff0c;向大家更清晰的介紹數據結構相關知識&#xff08;算法題都出自&#x1f64c;B站馬士兵教育——左老師的課程&#xff0c;講的很好&#xff0c;對于想入門刷題的人很有幫助&#x1f4…

稅務專業人員能力構建與發展路徑指南

CDA數據分析師證書含金量高&#xff0c;適應了未來數字化經濟和AI發展趨勢&#xff0c;難度不高&#xff0c;行業認可度高&#xff0c;對于找工作很有幫助。一、稅務專業人員的核心能力框架能力維度關鍵技能要素專業工具與方法論實踐輸出成果稅務法規應用稅種政策解讀、法規更新…

Linux中rsync使用與inotify實時同步配置指南

Linux中rsync使用與inotify實時同步配置指南 一、rsync 簡介 rsync&#xff08;Remote Sync&#xff09;是 Linux 系統下的一款高效數據鏡像和備份工具&#xff0c;用于在本地或遠程同步文件和目錄。 支持本地復制、基于 SSH 的遠程同步&#xff0c;以及使用自有 rsync 協議的同…

Unicode 字符串轉 UTF-8 編碼算法剖析

&#x1f4ca; Unicode 字符串轉 UTF-8 編碼算法剖析 ——從 C# char 到 C wchar_t 的編碼轉換原理 引用&#xff1a;UTF-8 編解碼可視化分析 &#x1f50d; 1. 算法功能概述 該函數將 Unicode 字符串&#xff08;C# string&#xff09;轉換為 UTF-8 編碼的字節數組&#xf…

php的安全性到底怎么樣

PHP作為一種流行的服務器端腳本語言&#xff0c;被廣泛應用于Web開發。然而&#xff0c;由于PHP是一種較為靈活的語言&#xff0c;其安全性議題一直備受爭議。在這篇文章中&#xff0c;我將從多個方面來討論PHP的安全性&#xff0c;包括常見的安全漏洞、防范措施以及最佳實踐。…

mapbox高階,結合threejs(threebox)添加建筑glb模型,添加陰影效果,設置陰影顏色和透明度

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言 1.1 ??mapboxgl.Map 地圖對象 1.2 ??mapboxgl.Map style屬性 1.3 ??threebox loadObj加載模型 二、??…

SSM從入門到實戰:1.6 Spring數據訪問與JDBC模板

&#x1f44b; 大家好&#xff0c;我是 阿問學長&#xff01;專注于分享優質開源項目解析、畢業設計項目指導支持、幼小初高的教輔資料推薦等&#xff0c;歡迎關注交流&#xff01;&#x1f680; 06-Spring數據訪問與JDBC模板 &#x1f4d6; 本文概述 本文是SSM框架系列Spri…

下一代IT服務管理:ITIL5會是什么樣?

ITIL4發布到現在也就5年多時間&#xff0c;按照以往的更新節奏&#xff0c;ITIL5最早也得2027年之后。但現在IT發展的速度&#xff0c;跟以前完全不是一個量級。AI都快把我們的飯碗搶了&#xff08;開個玩笑&#xff09;&#xff0c;ITIL要是還按部就班&#xff0c;估計真要被時…

最新研究進展:2023-2025年神經機器翻譯突破性成果

文章目錄 一、模型架構創新 1.1 混合架構的崛起 1.2 多模態翻譯的突破 1.3 大語言模型與NMT的深度融合(2023-2024) 1.4 非自回歸翻譯(NAT)的效率革命(2024) 二、數據與訓練策略優化 2.1 低資源語言翻譯的飛躍 2.2 動態數據增強技術 三、效率與部署 3.1 模型壓縮與加速 3.…

OpenTelemetry WebSocket 監控終極方案:打通最后一公里

概述 OpenTelemetry&#xff0c;以下簡稱 OTEL&#xff0c;是由 CNCF 托管的“一站式可觀測性標準”&#xff0c;把指標、鏈路、日志三大信號統一為單一 SDK/API&#xff0c;零侵入地采集從瀏覽器、移動端到后端、容器、云服務的全棧遙測數據&#xff0c;并支持 40 后端一鍵導…

VS Code 出現的 Web 視圖加載錯誤和服務工作者注冊失敗問題解決方案

針對 VS Code 或 Cursor &#xff08;vscode系&#xff09;中出現的 Web 視圖加載錯誤和服務工作者注冊失敗問題&#xff0c;以下是永久性解決方案的完整操作指南&#xff1a;解決方案步驟打開命令面板 使用快捷鍵 CtrlShiftP&#xff08;Windows/Linux&#xff09;或 CmdShift…

【qml-4】qml與c++交互(類型多例)

背景&#xff1a; 【qml-1】qml與c交互第一次嘗試&#xff08;實例注入&#xff09; 【qml-2】嘗試一個有模式的qml彈窗 【qml-3】qml與c交互第二次嘗試&#xff08;類型注冊&#xff09; 【qml-4】qml與c交互&#xff08;類型多例&#xff09; 【qml-5】qml與c交互&#…

圖數據庫如何構筑 Web3 風控防線 聚焦批量注冊與鏈上盜轉 悅數圖數據庫

隨著 Web3 生態的不斷演進&#xff0c;鏈上風險呈現出團伙化、隱蔽化和動態化的趨勢&#xff0c;傳統的單點風控手段已難以應對復雜多變的攻擊模式。尤其在批量注冊薅羊毛與鏈上交易盜轉洗錢等高頻風險場景中&#xff0c;攻擊者往往通過偽造身份、跨鏈操作、多層嵌套轉賬等方式…

恒流源電路學習

恒流源的設計原理&#xff1a; 如圖所示你可以看到右邊的的推到公式得到紅點處的電壓是一個和左邊相關的定值&#xff0c;所以呢右邊的電流就是電壓除以那個4Ω&#xff0c;所以得到右邊的電路的電流大體是一個定值&#xff0c;不管你再加什么東西都可以保持這個電流&#xff…

基于生成對抗網絡的模糊圖像恢復原理與技術實現

1. 引言圖像模糊是數字圖像處理中的常見問題&#xff0c;其成因包括相機抖動、物體運動、聚焦不良等。傳統方法如維納濾波、Lucy-Richardson 算法等依賴于模糊核估計和逆濾波&#xff0c;在復雜場景下性能有限。生成對抗網絡&#xff08;Generative Adversarial Networks, GAN&…

【Doris 系列】Doris IP 變更修復

FE 恢復 異常日志 查看 fe.out 會有以下報錯&#xff0c;此時 fe 進程是無法啟動的&#xff0c;操作前注意備份所有 fe 的元數據并停止上游讀寫動作&#xff01; java.io.IOException: the self host 192.168.31.78 does not equal to the host in ROLE file 192.168.31.81. Yo…