Hard-题目7:42. Trapping Rain Water

原创 2016年05月31日 23:25:33

题目原文:
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.
题目大意:
给出n个非负整数数组,其中height[i]代表坐标轴上横坐标为[i,i+1]的矩形的高度,计算这些矩形和x轴围成的“容器”能装多少水。
题目分析:
本题是Middle-题目31的变形,也是用两个指针i和j分别指向数组头和结尾,记两边矩形的高度分别为height[i]和height[j],分两种情况讨论:
(1) height[i]<height[j],则i向右移动,如果后面矩形的高度小于height[i],则其高度差值一定可以装水(因为j那边比i高,不管中间是什么情况,j那侧一定不是“短板”,如果后面矩形的高度大于Height[i],则停止滑动i,因为已经找到一个“杯子”并计算出它的水量了。
(2) height[i]>height[j],同理j向左移动,找到一个高度大于等于height[j]的矩形,并记录差值(可以装水)。
等于的情况放到任何一种里面都可以,因为等于的时候装水量为0,最终到I,j相遇时循环停止。整个数组只扫描了一遍。
源码:(language:java)

public class Solution {
    public int trap(int[] height) {
        int res=0;
        int l=0;
        int r=height.length-1;
        while(l<r){
            int temp=Math.min(height[l],height[r]);
            if(temp==height[l]){
                l++;
                while(l<r&&height[l]<=temp){
                    res+=temp-height[l];
                    l++;
                }

            }
            else{
                 r--;
                 while(l<r&&height[r]<=temp){
                    res+=temp-height[r];
                    r--;
                }

            }
        }
        return res;
    }
}

成绩:
1ms,beats 87.85%,众数2ms,71.18%
Cmershen的碎碎念:
也没什么要注意的,认真理解了上一题之后本题变化也不是很大。关键是注意“寻找杯子”的过程。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

面试算法——双指针的应用leetcode 42. Trapping Rain Water

.给定一个非负数的数组,代表一个容器。例如数组[0,1,0,2,1,0,1,3,2,1,2,1],就是 以下图形中黑色的部分。如果用这个容器接水的话,请问可以接多少水?还以这个数组为例, 可以接6格水...
  • zhou_yujia
  • zhou_yujia
  • 2016年08月10日 14:11
  • 1640

直方图蓄水问题 Trapping Rain Water

问题:Given n non-negative integers representing an elevation map where the width of each bar is 1, com...
  • luckyjoy521
  • luckyjoy521
  • 2014年02月20日 21:45
  • 846

水池蓄水问题(Trapping Rain Water)

给定一个数组,表示连续的地表的高度,求当下雨时,这个连续的地表最多能蓄多少水,比如给定数组[0,1,0,2,1,0,1,3,2,1,2,1]得到结果为6,如下图所示: 分析 对...
  • abc398966925
  • abc398966925
  • 2014年05月13日 01:03
  • 655

每日算法之三十三:Trapping Rain Water

这是一个很有意思的问题,求解最大容积问题,值得动脑筋想一想。 原题如下: Given n non-negative integers representing an elevation m...
  • yapian8
  • yapian8
  • 2014年06月13日 22:04
  • 628

42 Trapping Rain Water 【基本解法和优化方法】

这题挺有意思。最naive的想法就是看每个位置左右两边的bar的高低,然后来决定当前位置能装多少水。有意思的地方在于,每个位置的组左右高度,不是其相邻位置的高度,而是整个左边部分和右边部分的最大值!这...
  • laserljy123
  • laserljy123
  • 2017年03月22日 03:06
  • 109

LeetCode—Trapping Rain Water 储水问题,从两边向中间

Given n non-negative integers representing an elevation map where the width of each bar is 1, comput...
  • xietingcandice
  • xietingcandice
  • 2015年04月09日 12:20
  • 454

LeetCode | Trapping Rain Water(柱子间存储的水容量)

Given n non-negative integers representing an elevation map where the width of each bar is 1, comput...
  • a45872055555
  • a45872055555
  • 2014年08月10日 20:24
  • 598

【LeetCode】Trapping Rain Water 2013年美团网校园招聘研发工程师笔试题

Given n non-negative integers representing an elevation map where the width of each bar is 1, comput...
  • xiaozhuaixifu
  • xiaozhuaixifu
  • 2013年10月29日 22:07
  • 1029

leetcode 407. Trapping Rain Water II 寻找水+最短木桶现象 + 模拟海水上升

Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevati...
  • JackZhang_123
  • JackZhang_123
  • 2017年12月08日 11:21
  • 39

【线性扫描ijk_贪心】candy 最少蛋糕分配、Trapping Rain water

Candy  Total Accepted: 14466 Total Submissions: 78095My Submissions There are N children...
  • brandohero
  • brandohero
  • 2014年08月01日 21:43
  • 513
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hard-题目7:42. Trapping Rain Water
举报原因:
原因补充:

(最多只允许输入30个字)