給定 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...