leetcode42.接雨水
阿新 • • 發佈:2021-11-06
leetcode42.接雨水
題目
給定 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
求解
/** * @param {number[]} height * @return {number} */ var trap = function(height) { let len = height.length; let min = 0; let water = 0; let left = 0; let right = len-1; while(left<right){ //先判斷左右指標哪個最小 if(height[left]<height[right]){ //是否大於已經計算過的雨量高度 if(height[left]>min){ //計算雨量 for(let i = left+1;i<right;i++){ //去掉已經計算過一部分雨量的部分 if(height[i]<min){ water = water+(height[left]-min) }else if(height[i]<height[left]){ water = water+(height[left]-height[i]) } } //更換新min min = height[left] } left++ }else{ if(height[right]>min){ for(let i = left+1;i<right;i++){ if(height[i]<min){ water = water+(height[right]-min) }else if(height[i]<height[right]){ water = water+(height[right]-height[i]) } } min = height[right] } right-- } } return water };