接雨水

题目:给定 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

来源:https://leetcode-cn.com/problems/trapping-rain-water/

法一:自己的代码

思路:遍历第二个至倒数第一个,每次求出要遍历元素的左右两边的最大值,再取最小值,累积求和

class Solution:
    def trap(self, height) -> int:

        all_water, i = 0, 1
        while i < len(height)-1:
            every_water = ( min(max(height[:i]),max(height[i+1:]))) - height[i]
            if every_water > 0:
                all_water = all_water + every_water
            print( i , all_water)
            i = i+1
        return all_water
        # all_water, i = 0, 1
        # while i < len(height) - 1:
        #     l = max(height[:i])
        #     r = max(height[i+1:])
        #     if l > height[i]:
        #         if r > height[i]:
        #             every_water = min(r, l) - height[i]
        #             all_water = every_water + all_water
        #     i = i+1
        # return all_water

if __name__ == '__main__':
    duixiang = Solution()

    ww = duixiang.trap([0,1,0,2,1,0,1,3,2,1,2,1])
    print('结果是:', ww)
View Code

 

posted on 2019-08-20 13:09  吃我一枪  阅读(126)  评论(0编辑  收藏  举报

导航