42.接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
class Solution {
public:
int trap(vector<int>& height) {
vector<int> left; vector<int> right; int sum = 0 ;
//左边柱子高度为:max(左边柱子高度,左边柱子的左边柱子高度)
for(int i = 0;i <= height.size()-1 ;i++){
if(i == 0){
left.push_back(0);
continue;
}
int ll = max(height[i-1],left[i-1]);
left.push_back(ll);
}
for(int i = height.size()-1;i >= 0 ;i--){
if(i == height.size()-1){
right.push_back(0);
continue;
}
int rr = max(height[i+1],right[(height.size()-1)-(i+1)]);
right.push_back(rr);
}
//每个位置的储水量等于 min(左,右)- 自身高度
for(int i = 1;i<height.size()-1;i++){
int hh = min(left[i],right[(height.size()-1)-i]) - height[i];
if (hh > 0 )sum += hh;
}
return sum;
}
};
说明
对于每一个柱子来说,它的储水量可以表示为 MIN(左边柱子高度,右边柱子高度)- 柱子本身的高度
对于每一个柱子来说,它的左边柱子高度为 MAX(左边柱子的高度,左边柱子的左边柱子的高度)
对于每一个柱子来说,它的右边柱子高度为 MAX(右边柱子的高度,右边柱子的右边柱子的高度)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理