当前位置: 首页 > news >正文

储存水..

问题描述:

给定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  # 返回最终计算出的水量

http://www.lryc.cn/news/494105.html

相关文章:

  • Cmake 常用操作总结
  • Kylin Server V10 下 RocketMQ 主备自动切换模式部署
  • DevOps工程技术价值流:GitLab源码管理与提交流水线实践
  • Vue 3 中实现页面特定功能控制
  • VLC 播放的音视频数据处理流水线搭建
  • 何时在 SQL 中使用 CHAR、VARCHAR 和 VARCHAR(MAX)
  • 学习笔记043——HashMap源码学习1
  • 单点登录原理
  • 【随笔】AI大模型对软件开发的影响
  • JAVA中接口类和抽象类的区别
  • 【AI系统】昇腾 AI 架构介绍
  • uniapp input只输入一个字符就自动失去焦点
  • 定时/延时任务-ScheduledThreadPoolExecutor的使用
  • 自编码器(一)
  • Spring Cloud(Kilburn 2022.0.2版本)系列教程(五) 服务网关(SpringCloud Gateway)
  • 40分钟学 Go 语言高并发:Go程序性能优化方法论
  • 一文解析Kettle开源ETL工具!
  • Tomcat新手成长之路:安装部署优化全解析(上)
  • 跟我学C++中级篇——通信的数据的传递形式
  • C语言 qsort及应用
  • 【C语言】连接陷阱探秘(4):检查外部类型
  • 打造双层环形图:基础与高级渐变效果的应用
  • 【Git】Git 完全指南:从入门到精通
  • 【mac】mac自动定时开关机和其他常用命令,管理电源设置的工具pmset
  • 【Leecode】Leecode刷题之路第62天之不同路径
  • 基于深度学习的手势识别算法
  • helm部署golang服务
  • DreamCamera2相机预览变形的处理
  • Mysql误删表中数据与误删表的恢复方法
  • lapack、blas、solver库的区别和联系