[leetcode] 42. Trapping Rain Water @ python

本文介绍了一种解决LeetCode上'雨水陷阱'问题的有效算法——双指针法。通过定义左右指针及最小高度,该算法能在O(n)时间内,O(1)空间复杂度下,计算出由不同高度的bar组成的数组中可以接住多少雨水。文章详细解释了算法的运行逻辑,并提供了Python实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题

https://leetcode.com/problems/trapping-rain-water/

解法

双指针法, 用l, r定义左边和右边的index, min_height作为目前bar的高度,只能是左右两边高度的较小值, 然后两个指针都往中间刷, 遇到高度小于min_height的index时, 将该index能接到的水加到结果里.
Time: O(n)
Space: O(1)

代码

class Solution:
    def trap(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        n = len(height)
        l, r, ans, min_height = 0, n-1, 0, 0
        while l < r:
            while l < r and height[l] <= min_height:
                ans += min_height - height[l]
                l += 1
            while l < r and height[r] <= min_height:
                ans += min_height - height[r]
                r -= 1
            min_height = min(height[l], height[r])
            
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值