思路就是用两个数组分别存一下左边最高的和右边最高的。
代码:
int maxl[30005];
int maxr[30005];
class Solution {
public:
int trap(vector<int>& height) {
int n = height.size();
memset(maxl, 0, sizeof(maxl));
memset(maxr, 0, sizeof(maxr));
int maxt = 0;
for(int i = 1; i <= n; i++) {
maxt = max(maxt, height[i-1]);
maxl[i] = maxt;
}
maxt = 0;
for(int i = n; i >=1 ; i--) {
maxt = max(maxt, height[i-1]);
maxr[i] = maxt;
}
int ret = 0;
for(int i = 1; i <= n; i++) {
ret += min( maxl[i], maxr[i] ) - height[i-1];
}
return ret;
}
};