美文网首页
leetcode每日一题 python解法 4月4日

leetcode每日一题 python解法 4月4日

作者: Never肥宅 | 来源:发表于2020-04-04 01:39 被阅读0次

    难度:困难

    题目内容:

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

    上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。


    image.png

    示例:

    输入: [0,1,0,2,1,0,1,3,2,1,2,1]
    输出: 6

    题解:

    思路的话,可以先从左向右遍历,如果自己是已经遍历的最高的,然后有比自己高的,那么两者之间肯定是满水
    之类的
    可以算出来最后的水平面轮廓然后减去所有的柱子

    class Solution:
        def trap(self, height: List[int]) -> int:
            curMax=height[0]
            curMaxindex = 0
            rain = 0#先把柱子一起计算,最后再删
            for i in range(len(height)):
                #最高的应该和之前最高的那个组成容器,容器的容积固定,即使再出现高的也不会增加
                if height[i]>=curMax:
                    rain += (i - curMaxindex)* curMax
                    curMax = height[i]
                    curMaxindex = i
                    print(rain)
            c = curMaxindex
            curMax=height[len(height)-1]
            curMaxindex = len(height)-1
            for j in range(len(height)-1,c-1,-1):
                print("j",j)
                #倒序着一直到最高
                if height[j]>=curMax:
                    rain += (j - curMaxindex)* curMax
                    curMax = height[j]
                    curMaxindex = j
                    print(rain)
            # 两个方向都没有计算最高点
            rain += height[c]
            rain -= sum(height)
            return rain
    

    emmm好像不太对吼。。。
    明天醒来再debug啦

    相关文章

      网友评论

          本文标题:leetcode每日一题 python解法 4月4日

          本文链接:https://www.haomeiwen.com/subject/tderphtx.html