思路就是用两个数组分别存一下左边最高的和右边最高的。
代码:
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;
}
};
本文介绍了一种雨水捕捉算法的实现思路及代码。通过记录每个位置左侧和右侧的最大高度,计算能够捕捉到的雨水总量。该算法使用了两次遍历,一次从左到右,一次从右到左。
1082

被折叠的 条评论
为什么被折叠?



