题目:
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.

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!
Example:
Input: [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6
题目的意思大概是:这个数组是描绘一座山上每个山峰的高度,当下雨时,山峰之间会存储雨水,计算雨水的量。
解法:
我们首先找到最高的山峰,在最高峰的左边,从左往右搜索,当前一座峰比后一座峰高时,记录蓄水量(因为之后至少肯定有最高峰将水蓄住);而对于最高峰的右侧,采用从右想做的方法,计算蓄水量。
代码:
class Solution {
public int trap(int[] height) {
int pre, rs = 0, Top = 0, length = height.length, index;
// find the summit.
for(index = 1; index<length; index++) {
if(height[index]>=height[Top]) Top = index;
}
// process the left side.
for(pre = index = 0; index<Top; index++) {
if(height[index]<pre) rs += (pre-height[index]);
else pre = height[index];
}
// process the right side.
for(pre = 0, index = length-1; index>Top; index--) {
if(height[index]<pre) rs += (pre-height[index]);
else pre = height[index];
}
return rs;
}
}
这是一个O(n)的解法。
博客围绕计算山峰间雨水存储量的问题展开。给定代表山峰高度的数组,要计算下雨后能存储的雨水量。解法是先找到最高峰,在其左边从左往右搜索,前峰比后峰高时记录蓄水量;右边从右往左计算,给出了O(n)的解法。
631

被折叠的 条评论
为什么被折叠?



