leetcodeday42 –接雨水

给定 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

提示:

  • n == height.length
  • 1 <= n <= 2 * 104
  • 0 <= height[i] <= 105

初次尝试:

#
# @lc app=leetcode.cn id=42 lang=python3
#
# [42] 接雨水
#

# @lc code=start
class Solution:
    def trap(self, height: List[int]) -> int:
        lens=len(height)
        i=0
        rain=0
        all=0
        no=0
        start=1
        while i<lens-1:
           # print(i,start)
            if start>=lens:
                height[i]=max(height[i+1:]) if i+1<lens else height[i]
                # i=i+1
                start=i+1
                continue

            if height[i]>height[start]:
                start=start+1
            elif height[i]<=height[start]:
                all=all+(start-i-1)*height[i]
                for j in range(i+1,start):
                    no= no + height[j]
                    
                    rain = rain+(all-no)
                    all=no=0
                i=start
                start=i+1
            

        return rain
            

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注