思路是单独计算每一个格子能解多少雨水,然后加起来。
当前格子能接的雨水数,取绝于左边和右边最远的最大高度和当前高度的差。很容易写出一个O(n^2)的代码,然后如果预处理一个leftMax和rightMax数组,就能把答案优化到O(N)
class Solution {
public:
int trap(vector<int>& height) {
int n = height.size();
int res=0;
for(int i=1;i<n-1;i++){
int maxLeft = height[i];
int maxRight = height[i];
for(int j=i-1;j>=0;j--) maxLeft = max(maxLeft,height[j]);
for(int k=i+1;k<n;k++) maxRight = max(maxRight,height[k]);
res+=(min(maxLeft,maxRight)-height[i]);
}
return res;
}
};
class Solution {
public:
int trap(vector<int>& height) {
int n = he