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, Hard] Trapping Rain Water

[Leetcode 42, Hard] Trapping Rain Water

leetcode || 42、 Trapping Rain Water

problem: Given n non-negative integers representing an elevation map where the width of each...

[leetcode]42. Trapping Rain Water(Java)

https://leetcode.com/problems/trapping-rain-water/#/description Given n non-negative inte...

Leetcode-42 Trapping in Rain Water

题目:             示例输入:                     &#...

[Leetcode] 42. Trapping Rain Water 解题报告

题目: Given n non-negative integers representing an elevation map where the width of each bar is 1, ...

[leetcode] 42. Trapping Rain Water

42. Trapping Rain Water Given n non-negative integers representing an elevation map where the widt...

leetcode 42. Trapping Rain Water

Given n non-negative integers representing an elevation map where the width of each bar is 1, comput...

LeetCode 42. Trapping Rain Water

题意给一个序列,里面是柱子的高度,求在一场雨之后,可以存储多少水 例:[0,1,0,2,1,0,1,3,2,1,2,1] 如图所示,箭头所指即为所能储存的水量思路如果一个区间内如果可以存水,那么这...

LeetCode 42. Trapping Rain Water

1. 题目描述 Given n non-negative integers representing an elevation map where the width of each bar is...

Leetcode #42. Trapping Rain Water 雨水收集 解题报告

1 解题思想原题给定一个X轴上的取值,可以视为一个凸起的墙,高度就是对应的Y值,现在问如果下了一场雨,那么这些凸起的地方一共可以收集到多少的雨水?那么如何才能收集呢?从图片上可以推出的就是,任意两个凸...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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