學習筆記 力扣題庫 接雨水 難度 困難

2021-09-13 23:25:14 字數 1446 閱讀 3105

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

上面是由陣列 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度圖,在這種情況下,可以接 6 個單位的雨水(藍色部分表示雨水)。感謝 marcos貢獻此圖。

示例:

輸入: [0,1,0,2,1,0,1,3,2,1,2,1]

輸出: 6

解題邏輯:

1、總邏輯:我們只要由給出的資料所構成的黑色圖 求出包括了水部分的黑藍色圖,再由黑藍色圖減去黑色圖資料,就可以得到水的數量

2、求黑藍圖:求黑藍圖時,我們可以假定左方有無限高牆體存在,然後求出乙個階梯向右的圖(right陣列)

然後再假定右方有無限高牆體存在,然後求出乙個階梯像左的圖(left陣列)

將兩圖相重疊取交集(min(left,right),我們就可以得到上面我們需要的黑藍圖

3、如何求出帶有左右牆的圖(left,right)

left:(右邊有牆)

從左往右看,只要當前位置沒上乙個位置高,那麼就讓當前位置的高度等於上乙個位置的高度

right:(左邊有牆)

從右往左看,只要當前位置沒上乙個位置高,那麼就讓當前位置的高度等於上乙個位置的高度

最後就是顯而易見的,用這個黑藍圖-黑圖,就得到水的數量

放上**實現:

class solution 

int water = 0;

for(int i = 0;i < length;i++)

return water;}}

時間複雜度o(n)

力扣接雨水問題

思路是這樣的,先找到陣列中的最大值,然後在以他為中心,左右分割遍歷陣列,遞迴陣列,總是找最大值,計算 兩個最大值之間的存水量 最後彙總相加即可得出結果.package test public class testcasetwo int reuslt trapleft height,maxinx tr...

力扣 42 接雨水

題目 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的高度圖,在這種情況下,可以接 6 個單位的雨水 藍色部分表示雨水 感謝 marcos 貢獻此圖。示例 輸入 0,1,0,2,1,...

力扣第42題 接雨水

原文是帶著講解,過程還算詳細 上題是乙個對題目的舉例說明 本次解題中用這個圖 我認為這個圖涵蓋了可能出現的情況,講解會比較好一點 第一種方法是暴力法,時間複雜度為o n 2 空間複雜度為o 1 public inttrap02 int height int max right 0 找出右邊最高 fo...