每日算法之接雨水

文章讨论了如何通过优化双指针算法解决给定非负整数表示柱子高度的问题,利用哈希记录值首次出现的位置以减少重复计算,计算雨水接量。
摘要由CSDN通过智能技术生成

题目描述

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

示例 1:
在这里插入图片描述

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
示例 2:
输入:height = [4,2,0,3,2,5]
输出:9

解法

暴力双指针解法(还没优化)

思路:一行一行数呗,雨水就是两边当着时,中间存在的空隙,就是这么数很多重复
优化思路:

1、在计算最大高度的时候做,这个时候,我们可以通过哈希的方式,记录不同的值第一次出现是在什么位置的相关索引,节省我们while遍历的时间。
2、也是在计算最大高度的时候做,顺便得到数组最大最小值的范围。

class Solution:
    def trap(self, height: List[int]) -> int:
        l = len(height)
        max_n = max(height)
        cur_sum = 0
        for i in range(1,max_n+1):
            left = 0
            right = l-1
            while height[left] < i and left < right:
                left += 1
            while height[right] < i and left < right:
                right -= 1
            for j in range(left,right):
                if height[j] < i:
                    cur_sum += 1
        return cur_sum
                
             
       

其他解法待更新,= =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry Xie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值