Leetcode 42.接雨水
最容易理解和简洁的做法,每个柱子维护左右两个数组,保存左边最大以及右边最大,用最min(left,right)-height即为这个柱子的储水量
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
class Solution {
public:
int trap(vector<int>& height) {
int n=height.size(),res=0;
vector<int> left(n),right(n);
left[0]=height[0],right[n-1]=height[n-1];
for(int i=1;i<n;i++){
left[i]=max(left[i-1],height[i]);
right[n-i-1]=max(right[n-i],height[n-i-1]);
}
for(int i=0;i<n;i++){
res+=min(left[i],right[i])-height[i];
}
return res;
}
};