当前位置: 首页> 科技> 数码 > 焦作百姓网免费发布信息_汽车网页设计论文_电脑培训机构_网上销售推广方案

焦作百姓网免费发布信息_汽车网页设计论文_电脑培训机构_网上销售推广方案

时间:2025/7/9 2:21:55来源:https://blog.csdn.net/pianmian1/article/details/144144393 浏览次数:2次
焦作百姓网免费发布信息_汽车网页设计论文_电脑培训机构_网上销售推广方案

问题描述:

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

思路解析:

思考一下,什么样的位置能盛水?只有在当前柱子的左边和右边都比它高的情况下才能储存住水,而储水量和左侧最高柱及右侧最高柱有关.具体来说就是和左右两侧最矮的高度直接相关.变量如下:

height变量:表示输入的柱高度组

left变量:表示左指针指向的柱,初始值为0

right变量:表示右指针指向的柱,初始值为0

leftmax变量:表示左指针所指的左边最高的柱高

rightmax变量:表示右指针所指的柱右边最高的柱高

res变量:表示输出结果

完整代码如下:

def water(self, height):  # 定义一个名为water的方法,接收一个列表height作为参数left = 0  # 初始化左指针为0right = len(height) - 1  # 初始化右指针为列表的最后一个元素的索引leftmax = rightmax = 0  # 初始化左右两边的最大高度为0res = 0  # 初始化结果res为0,用于累积能够容纳的水的总量while left < right:  # 当左指针小于右指针时,继续循环if height[left] < height[right]:  # 如果左边的高度小于右边的高度if height[left] >= leftmax:  # 如果当前左边的高度大于等于左边的最大高度leftmax = height[left]  # 更新左边的最大高度else:  # 如果当前左边的高度小于左边的最大高度res += leftmax - height[left]  # 计算当前位置可以添加的水,并累加到resleft += 1  # 移动左指针else:  # 如果左边的高度不小于右边的高度(即大于或等于)if height[right] >= rightmax:  # 如果当前右边的高度大于等于右边的最大高度rightmax = height[right]  # 更新右边的最大高度else:  # 如果当前右边的高度小于右边的最大高度res += rightmax - height[right]  # 计算当前位置可以添加的水,并累加到resright -= 1  # 移动右指针return res  # 返回最终计算出的水量

关键字:焦作百姓网免费发布信息_汽车网页设计论文_电脑培训机构_网上销售推广方案

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: