接雨水(4.4 leetcode每日打卡)
给定 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
输出: 6
思路:1.接完水后的数组最大值的左边不严格递增,最大值的右边不严格递减。
2.先找到最大值的下标
3.左边遍历到最大值下标,右边遍历到最大值的下标,发现左右两边遍历的时候分别用一个cur表示最大值索引,如果发现索引过程中小于最大值,则 res += cur - height[i] .
4.可以极限一点想,假设我们已经找到最大值下标,则左右两边只要高度不等于0则都能存水,存水量就是当前索引的最大值与下一个高度的差。
1 int trap(int* height, int heightSize) 2 { 3 int n = heightSize; 4 if(n == 0) 5 { 6 return 0; 7 } 8 int maxIndex = 0; 9 int max = height[0]; 10 for(int i = 1; i < n; i++) 11 { 12 if(height[i] > max) 13 { 14 maxIndex = i; 15 max = height[i]; 16 } 17 } 18 int res = 0,cur = height[0]; 19 for(int i = 1; i < maxIndex; i++) 20 { 21 if(height[i] < cur) 22 { 23 res += cur - height[i]; 24 } 25 else 26 { 27 cur = height[i]; 28 } 29 } 30 cur = height[n-1]; 31 for(int i = n-2; i > maxIndex; i--) 32 { 33 if(height[i] < cur) 34 { 35 res += cur-height[i]; 36 } 37 else 38 { 39 cur = height[i]; 40 } 41 } 42 return res; 43 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端