码迷,mamicode.com
首页 > 移动开发 > 详细

LeetCode:Trapping Rain Water

时间:2016-06-12 02:01:15      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

Trapping Rain Water




Total Accepted: 68935 Total Submissions: 211305 Difficulty: Hard

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.

技术分享

The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

Subscribe to see which companies asked this question

Hide Tags
 Array Stack Two Pointers



























思路一:

观察水的分布可发现,水位的分布情况显现梯形的,即先上升后下降。

因此可以先求出最高点,然后左右两边往中间遍历求水的容量。


c++ code:

class Solution {
public:
    int trap(vector<int>& height) {
        
        int size = height.size();
        
        int maxIndex = 0;
        for(int i=0;i<size;i++) {
            if(height[i] > height[maxIndex]) maxIndex = i; 
        }
        
        int area = 0;
        int maxLeft = 0;
        for(int i=0;i<maxIndex;i++) {
            if(height[i] > maxLeft) maxLeft = height[i];
            else area += maxLeft - height[i];
        }
        
        int maxRight = 0;
        for(int i=size-1;i>=maxIndex;i--) {
            if(height[i] > maxRight) maxRight = height[i];
            else area += maxRight - height[i];
        }
        
        return area;
    }
};


思路二:

直接用两个指针分别往中间移动,每次维持次高的水位secHeight。


java code:

public class Solution {
    public int trap(int[] height) {
        
        int len = height.length;
        
        int left = 0, right = len - 1;
        int secHeight = 0;
        int area = 0;
        while(left <right) {
            if(height[left] < height[right]) {
                secHeight = Math.max(secHeight, height[left]);
                area += secHeight - height[left];
                left++;
            } else {
                secHeight = Math.max(secHeight, height[right]);
                area += secHeight - height[right];
                right--;
            }
        }
        return area;
    }
}


LeetCode:Trapping Rain Water

标签:

原文地址:http://blog.csdn.net/itismelzp/article/details/51636695

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!