您的位置:首页 > 移动开发

Leetcode刷题记——Trapping Rain Water(捕获雨水)

2017-02-21 18:39 513 查看
一、题目叙述:

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.

二、解题思路:

本题是参考别人的代码而来的,解题思路主要如下,针对坐标系每个位置求能容纳的雨水的量:每个位置所能容纳的雨水的量为其位置左边最大值与右边最大值两者中较小者减去此位置的值;

(1)分别计算每个位置左右边的最大值,放在数组left、right中;

(2)对每个位置计算容雨量,加起来

(3)注意
4000
输入非空的情况;

三、源码:

public class Solution
{
public int trap(int[] height)
{
if(height.length == 0) return 0;
int maxLeft = 0;
int maxRight = 0;
int sum = 0;
int len = height.length;
int[] left = new int[len];
int[] right = new int[len];
for (int i = 0; i < len; i++)
{
left[i] = maxLeft;
maxLeft = Math.max(maxLeft, height[i]);
}
for (int i = len - 1; i >= 0; i--)
{
right[i] = maxRight;
maxRight = Math.max(maxRight, height[i]);
}
for (int i = 0; i < len; i++)
{
if (Math.min(left[i], right[i]) - height[i] > 0)
sum += Math.min(left[i], right[i]) - height[i];
}
return sum;
}
public static void main(String args[])
{

// int[] digits = {0};
Solution solution = new Solution();
int[] abc = {0,1,0,2,1,0,1,3,2,1,2,1};
// for(int i = 0; i < abc.length; i ++)
System.out.print(solution.trap(abc));

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java