1. 程式人生 > 其它 >Leetcode 接雨水

Leetcode 接雨水

技術標籤: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的的接水量。