接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6
思路:先找最高的,一分为二,让后找递增的序列,cur表示前一个最高的柱子,i表示当前柱子,只有当前柱子比cur要矮的时候,才会蓄水。如果后面一个柱子比当前高,则cur=i;直到最高的柱子。
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<string>
#include<iomanip>
using namespace std;
class Solution {
public:
int trap(vector<int>& height) {
if (height.size()<3) return 0;
int max = 0;
int res = 0, cur = 0;
for (int i = 1; i<height.size(); ++i) {
if (height[i]>height[max])
max = i;
}
for (int i = 0, cur = 0; i<max; ++i) {
if (height[i]>height[cur]) {
cur = i;
}
else {
res += height[cur] - height[i];
}
}
for (int i = height.size() - 1, cur = height.size()-1; i>max; --i) {
if (height[i]>height[cur]) {
cur = i;
}
else {
res += height[cur] - height[i];
}
}
return res;
}
};
int main()
{
Solution solution;
vector<int> nums={ 4,2,3 };
int K=solution.trap(nums);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具