LeetCode刷题之42.接雨水

LeetCode刷题之42.接雨水

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
    在这里插入图片描述
    上面是由数组 [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
  • 代码:
class Solution:
    def trap(self, height: List[int]) -> int:
        length = len(height)
        if length <= 1:
            return 0
        result = 0
        i,j = 0,length-1
        zhongjian_val = height.index(max(height))
        left,right = height[0],height[length-1]
        while i <= zhongjian_val:
            if height[i] <= left:
                result += left - height[i]
            if height[i] > left:
                left = height[i]
            i += 1
        while j >= zhongjian_val:
            if height[j] <= right:
                result += right - height[j]
            if height[j] > right:
                right = height[j]
            j -= 1
        return(result)
# 执行用时 :76 ms, 在所有 Python3 提交中击败了68.64%的用户
# 内存消耗 :14.6 MB, 在所有 Python3 提交中击败了5.00%的用户
  • 算法说明:
    先将柱子数目不足两个的情况排除,返回0;然后找到最高的一个柱子,求出对应的索引zhongjian_val,从左右两边用指针left和right进行遍历,如果当前的元素小于指针处的元素,求出两者之间的落差,累加到result上;如果当前元素大于指针处的元素,将指针移动到当前元素,继续遍历,遍历到最大元素处为止,返回最后结果。
发布了90 篇原创文章 · 获赞 1 · 访问量 1047

猜你喜欢

转载自blog.csdn.net/qq_34331113/article/details/102862988