题目描述:
给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。
题目分析:
每一个单位所能存储的水量决定于最矮的那一边,所以先分别获取两边最高的柱子的高度,取小值再减去该单位的高度就是该单位的储水量。
代码如下:
class Solution {
public:
int trap(vector<int>& height) {
int n=height.size();
vector<int> leftmax(n);
vector<int> rightmax(n);
if(n==0){
return n;
}
leftmax[0]=height[0];
rightmax[n-1]=height[n-1];
for(int i=1;i<n;i++){
leftmax[i]=max(leftmax[i-1],height[i]);
}
for(int i=n-2;i>=0;i--){
rightmax[i]=max(rightmax[i+1],height[i]);
}
int res=0;
for(int i=0;i<n;i++){
res+=min(leftmax[i],rightmax[i])-height[i];
}
return res;
}
};