题目:
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!
分析:
容积总是由最短板决定,每次移动短板找出最大容积。
这道题关键点是是两边往中间遍历,记录当前第二高点secHeight,然后利用这个第二高点减去当前历经的柱子,剩下就装水容量了。为什么是第二高点?因为两边比较,最高的点不用动,只移动第二高点。
代码:
import java.util.*;
public class Solution {
public int trap(int[] A) {
int area=0;
int left=0;
int right=A.length-1;
int secondhig和;
//right left 记录最右边和最左边的位置
//secondheight记录当前的高度,每次移动一位,更新最大的盛水量。
if(A[left] > A[right]) {
secondhigh = Math.max(A[right],secondhigh);
area += secondhigh - A[right] ;
right--;
}else{
secondhigh = Math.max(A[left],secondhigh);
area += secondhigh - A[left] ;
left++;
}
}
return area;
}
}