力扣问题之接雨水(一)

文章讲述了如何利用双指针技巧解决给定柱子高度图中计算下雨后接收到的雨水量问题,通过比较左右指针所对应的柱子高度并动态调整,得出雨水面积。
摘要由CSDN通过智能技术生成

接雨水问题

接雨水问题(双指针法)

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

思路

在左右两边各设置一个指针移动,小的移动指针,同时记录下最大高度。以左边为例先是1,和右相等,右指针右移,高度变为 2,右高,所以左指针移动,变为0,但此时左指针最大高度为1所面积有1-0=1.继续左指针移动高度变为2,此时右指针移动,高度变为1,此时右指针最大高度为2,面积2-1=1.以此类推当左右指针碰到时,面积总和就是接的雨水。

代码如下

height_rain =[4,2,0,3,2,5]
left_rain = 0
right_rain = len(height_rain)-1
left_rain_max = 0
right_rain_max = 0
ans_rain = 0
while left_rain < right_rain:
 #找到最大值
    left_rain_max = max(left_rain_max, height_rain[left_rain])
    right_rain_max = max(right_rain_max, height_rain[right_rain])
    #左边大于右边时
    if height_rain[left_rain] < height_rain[right_rain]:
        ans_rain += left_rain_max - height_rain[left_rain]
        left_rain += 1
    #右边大于左边时
    else:
        ans_rain += right_rain_max - height_rain[right_rain]
        right_rain -= 1
            
print(ans_rain)    
           
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值