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

LeetCode: Trapping Rain Water 解题报告

2014-10-28 17:27 453 查看
https://oj.leetcode.com/problems/trapping-rain-water/

[b]Trapping Rain Water[/b]
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!

SOLUTION 1:

从左到右扫描,计算到从左边到curr的最高的bar,从右到左扫描,计算到从右边到curr的最高的bar。

再扫描一次,把这两者的低者作为{桶}的高度,如果这个桶高于A[i]的bar,那么A[i]这个bar上头可以存储height - A[i]这么多水。把这所有的水加起来即可。

public class Solution {
public int trap(int[] A) {
// 2:37
if (A == null) {
return 0;
}

int len = A.length;
int[] l = new int[len];
int[] r = new int[len];

for (int i = 0; i < len; i++) {
if (i == 0) {
l[i] = A[i];
} else {
l[i] = Math.max(l[i - 1], A[i]);
}
}

int water = 0;
for (int i = len - 1; i >= 0; i--) {
if (i == len - 1) {
r[i] = A[i];
} else {
// but: use Math, not max
r[i] = Math.max(r[i + 1], A[i]);
}

water += Math.min(l[i], r[i]) - A[i];
}

return water;
}
}


View Code

CODE:

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/array/Trap.java
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: