1. 程式人生 > >leetcode 42. Trapping Rain Water

leetcode 42. Trapping Rain Water

pre lan pub after lin ret src esc problem

link

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

技術分享

題意:看文字比較奇怪,看圖片很清晰。給出每塊的高度,求出往上面倒水那坨東西裏可以存放多少水。

思路:

每個bar 能存多少水取決於它左邊的最高的bar的高度和右邊最高的bar的高度的較小的那個, 與其自身高度的差。

因此方法很簡單,從左到右掃一次可以算出每個bar左邊的最高高度。從右到左掃一次可以算出每個bar右邊的最高的高度。

code:

class Solution {
public:
    int trap(vector<int>& height) {
        if(height.size() == 0) return 0;
        vector<int>leftMax(height.size());
        leftMax[0] = height[0];
        for(int i = 1 ; i < height.size(); i++){
            leftMax[i] 
= max(leftMax[i-1], height[i]); } int rightMax = INT_MIN; int ans = 0; for(int i = height.size() - 1; i >= 0; i--){ rightMax = max(rightMax, height[i]); ans += (min(rightMax, leftMax[i]) - height[i]); } return ans; } };

leetcode 42. Trapping Rain Water