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
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));
}
}
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--Trapping Rain Water(捕获雨水)Python
- Trapping Rain Water(捕获雨水)
- [LeetCode] Trapping Rain Water 搜集雨水
- Leetcode 407. Trapping Rain Water II 收集雨水2 解题报告
- LeetCode - Trapping Rain Water 等雨水的凹槽容量
- Trapping Rain Water 捕获最多的雨水
- [LeetCode] Trapping Rain Water II 收集雨水之二
- LeetCode Trapping Rain Water等雨水的凹槽容量
- [LeetCode] Trapping Rain Water 收集雨水
- LeetCode:Trapping Rain Water(装雨水问题)
- LeetCode 接雨水 Trapping Rain Water 积水问题
- [LeetCode] 407. Trapping Rain Water II 收集雨水 II
- Leetcode-42 Trapping in Rain Water
- [LeetCode] Trapping Rain Water II 题解
- LeetCode_42---Trapping Rain Water
- Leetcode: Trapping Rain Water
- leetcode Trapping Rain Water
- [LeetCode] Trapping Rain Water
- LeetCode : Trapping Rain Water
- Leetcode 42 Trapping Rain Water