Leetcode 接雨水
阿新 • • 發佈:2021-02-03
技術標籤:leetcode題集leetcode
接雨水
題目描述:
給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。 提示: n == height.length 0 <= n <= 3 * 10^4 0 <= height[i] <= 10^5
例項
輸入: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 個單位的雨水(藍色部分表示雨水)。
class Solution {
public int trap(int[] height) {
// 一邊遍歷,同時向兩邊擴散
int len = height.length;
int result = 0;
for(int i = 1; i<len-1 ; i++){
int max_left = 0,max_right = 0;
for(int j = i ; j>=0 ; j--){ // 向左邊擴散尋找:找到前i+1中元素中的最大的左邊界
max_left = (max_left>height[j])?max_left:height[j];
}
for(int j = i ; j<len ; j++){ // 向右邊擴散尋找:找到從第i+1個開始的後面所有元素最大右邊界
max_right = (max_right>height[j])?max_right:height[j];
}
result += ((max_left>max_right)?max_right:max_left) - height[ i]; // 求出當前能接的水量
}
return result;
}
}
最外層一個for迴圈,每次求出當前索引開始的最大右邊界和最大左邊界,然後每次將結果加上當前索引i的的接水量。