储存水..

问题描述:

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

思路解析:

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

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

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

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

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

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

res变量:表示输出结果

完整代码如下:

python 复制代码
def water(self, height):  # 定义一个名为water的方法,接收一个列表height作为参数
    left = 0  # 初始化左指针为0
    right = len(height) - 1  # 初始化右指针为列表的最后一个元素的索引
    leftmax = rightmax = 0  # 初始化左右两边的最大高度为0
    res = 0  # 初始化结果res为0,用于累积能够容纳的水的总量
    while left < right:  # 当左指针小于右指针时,继续循环
        if height[left] < height[right]:  # 如果左边的高度小于右边的高度
            if height[left] >= leftmax:  # 如果当前左边的高度大于等于左边的最大高度
                leftmax = height[left]  # 更新左边的最大高度
            else:  # 如果当前左边的高度小于左边的最大高度
                res += leftmax - height[left]  # 计算当前位置可以添加的水,并累加到res
            left += 1  # 移动左指针
        else:  # 如果左边的高度不小于右边的高度(即大于或等于)
            if height[right] >= rightmax:  # 如果当前右边的高度大于等于右边的最大高度
                rightmax = height[right]  # 更新右边的最大高度
            else:  # 如果当前右边的高度小于右边的最大高度
                res += rightmax - height[right]  # 计算当前位置可以添加的水,并累加到res
            right -= 1  # 移动右指针
    return res  # 返回最终计算出的水量
相关推荐
闪电麦坤959 分钟前
数据结构:排序算法的评判标准(Criteria Used For Analysing Sorts)
数据结构·算法·排序算法
Mercury_Lc1 小时前
【链表 - LeetCode】25. K 个一组翻转链表
数据结构·leetcode·链表
大翻哥哥1 小时前
Python地理空间数据分析:从地图绘制到智能城市应用
开发语言·python·数据分析
奇舞精选2 小时前
爬虫入门
爬虫·python
爬虫程序猿3 小时前
利用 Python 爬虫获取 1688 商品详情 API 返回值说明(代码示例)实战指南
开发语言·爬虫·python
明月看潮生4 小时前
编程与数学 02-017 Python 面向对象编程 23课题、测试面向对象的程序
开发语言·python·青少年编程·面向对象·编程与数学
小蒜学长4 小时前
基于django的梧桐山水智慧旅游平台设计与开发(代码+数据库+LW)
java·spring boot·后端·python·django·旅游
nightunderblackcat5 小时前
新手向:Python开发简易股票价格追踪器
开发语言·python
感哥5 小时前
DRF 认证
python·django
CYRUS_STUDIO5 小时前
Miniconda 全攻略:优雅管理你的 Python 环境
前端·后端·python