储存水..

问题描述:

给定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  # 返回最终计算出的水量
相关推荐
_一条咸鱼_39 分钟前
Python 数据类型之可变与不可变类型详解(十)
人工智能·python·面试
_一条咸鱼_39 分钟前
Python 入门之基本运算符(六)
python·深度学习·面试
_一条咸鱼_41 分钟前
Python 流程控制之 for 循环(九)
人工智能·python·面试
_一条咸鱼_44 分钟前
Python 语法入门之流程控制 if 判断(七)
人工智能·python·面试
_一条咸鱼_1 小时前
Python 流程控制之 while 循环(八)
人工智能·python·面试
HtwHUAT1 小时前
实验四 Java图形界面与事件处理
开发语言·前端·python
Tech Synapse1 小时前
基于Surprise和Flask构建个性化电影推荐系统:从算法到全栈实现
python·算法·flask·协同过滤算法
麦麦大数据1 小时前
vue+flask+CNN电影推荐系统
pytorch·python·cnn·flask·scikit-learn·电影推荐
腾飞开源1 小时前
02_Flask是什么?
python·flask·python web开发·flask快速入门教程·人人都能学·小白看得懂学得会·跟我学编程
終不似少年遊*1 小时前
国产之光DeepSeek架构理解与应用分析04
人工智能·python·深度学习·算法·大模型·ds