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.

Given[0,1,0,2,1,0,1,3,2,1,2,1], return6.

解题思路:两个指针,从最小的一边开始移动,一开始记录leftHight 和 rightHight。如果前/后一个比leftHight/rightHight低,加上高度差,否则更新leftHight/rightHight。


class Solution {
public:
    /*
     * @param heights: a list of integers
     * @return: a integer
     */
    int trapRainWater(vector<int> heights) {
        // write your code here
        int size = heights.size();
        if (size == 0) {
            return 0;
        }
        int left = 0;
        int right = size - 1;
        int leftHight = heights[left];
        int rightHight = heights[right];
        int total = 0;
        while (left < right) {
            if (leftHight < rightHight) {
                left++;
                if (leftHight > heights[left]) {
                    total = total + (leftHight - heights[left]);
                } else {
                    leftHight = heights[left];
                }
            } else {
                right--;
                if (rightHight > heights[right]) {
                    total = total + (rightHight - heights[right]);
                } else {
                    rightHight = heights[right];
                }
            }
        }
        return total;
    }
};

results matching ""

    No results matching ""