20200404-leetcode-42. 接雨水

在这里插入图片描述
传送门
开始直接暴力会一直超时O(nn)O(n*n)
可以先创建两个数组,保存从左向右和从右向左的最大值,空间换时间。O(n)O(n)
在这里插入图片描述

class Solution(object):
    def trap(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        lenh = len(height)
        if lenh == 0:
            return 0

        ans = 0
        max_left = [height[0]]
        max_right = [0 for _ in range(lenh)]
        max_right[lenh - 1] = height[lenh - 1]

        for i in range(1, lenh):
            max_left.append(max(max_left[i - 1], height[i]))

        for j in range(lenh - 2, -1, -1):
            max_right[j] = max(max_right[j + 1], height[j])

        for i in range(lenh):
            ans += min(max_left[i], max_right[i]) - height[i]

        return ans

开始直接暴力一直超时

class Solution(object):
    def trap(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        lenh = len(height)
        if lenh == 0:
            return 0
        ans = 0

        for i in range(lenh):
            left_max = right_max = 0

            for j in range(i, -1, -1):
                left_max = max(left_max, height[j])

            for j in range(i, lenh):
                right_max = max(right_max, height[j])

            ans += min(left_max, right_max) - height[i]

        return ans
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章