力扣接雨水(解析)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 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 个单位的雨水(蓝色部分表示雨水)。 

示例 2:

复制代码
输入:height = [4,2,0,3,2,5]
输出:9

找到一个高点,轮训到下一个高点,记录高点的值和下标

相邻的两个高点比较,取最小值

两个高点下标的差值

相邻两个高点的内值总和

两个高点的容量等于最小值乘以距离差

两个高点的接雨水等于 容量减去两个高点内值总和

轮训加上所有雨水值

hight =[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 ,3]

#记录高点值

hig_dict ={}

for i in range(len(hight)):

if i+1==len(hight):

如果最后一个值大于前一个值

if hight[i]>hight[i-1]:

hig_dict [i]=hight[i]

if higth[i]>hight[i+1]and higth[i]>hight[i-1]:

hig_dict [i]=hight[i]

else:

pass

#高点值下标

keys = list[hig_dict.keys]

#高点值

values = list[hig_dict.values]

#所有高点值容量

sum_all =[]

for i in range(len(values)):

if i+1==len(values):

break

#取相邻两个高点的最小值

if values[i]<=values[i+1]

tmp = values[i]

else:

tmp = values[i+1]

#-1是因为要去相邻两个数之间有几个值

length = keys[i+1] - keys[i]-1

sum_all.append(tmp*length)

#相邻高点内包含值的总容量

sum_out =[]

for k,v in enumerate(hight):

#排除最小高点之前的值

if k < keys[0]:

continue

#排除最大高点之后的值

if k > keys[-1]:

break

#排除高点值

if k in keys:

continue

else:

sum_out.append(hight[k])

sum_capacity = sum(sum_all) - sum(sum_out)

相关推荐
東隅已逝,桑榆非晚4 分钟前
深⼊理解指针(3)
c语言·数据结构·笔记·算法·排序算法
地平线开发者8 分钟前
地平线 征程 6 工具链进阶教程 征程 6E/M 工具链 QAT 精度调优
算法·自动驾驶
小O的算法实验室2 小时前
2025年IEEE TETCI,异构无人机取送货问题中的转运优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
chao1898449 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
沪漂阿龙9 小时前
AI大模型面试题:支持向量机是什么?间隔最大化、软间隔、核函数、LinearSVC 全面拆解
人工智能·算法·支持向量机
little~钰9 小时前
倍增算法和ST表
算法
知识领航员10 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
薛定e的猫咪10 小时前
因果推理研究方向综述笔记
人工智能·笔记·深度学习·算法
一只机电自动化菜鸟11 小时前
一建机电备考笔记(33) 机电专业技术(起重技术-吊装方案)(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计