给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。 感谢 Marcos 贡献此图。
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
class Solution {
public:
int trap(vector<int>& height) {
if (height.size()==0){
return 0;
}
int max_idx=0;
int max_val=0;
for (int i = 0; i < height.size(); ++i) {
if (height[i]>max_val){
max_val=height[i];
max_idx=i;
}
}
int tem_max=height[0];
int res=0;
for (int i = 0; i < max_idx; ++i) {
if (tem_max>height[i]) {
res += (tem_max - height[i]);
}
tem_max=max(tem_max,height[i]);
}
tem_max=height[height.size()-1];
for (int i = height.size()-1; i >max_idx; --i) {
if (tem_max>height[i]){
res+=(tem_max-height[i]);
}
tem_max=max(tem_max,height[i]);
}
return res;
}
};