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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章