42 Trapping Rain Water

两种思路:第一种 brute force : 主要是记录两侧积水的最大值的最小值减去当前的高度得到数值。=> 超时

第二种思路是将上述过程中的一遍一遍扫描的结果记录下来,这样可以减少之后的扫描次数。

class Solution(object):
    def trap(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        left, right = 0, len(height) - 1
        ans = 0
        for i in range(1, len(height) - 1):
            max_left = 0
            max_right = 0
            for j in range(i, -1, -1):
                max_left = max(max_left, height[j])
            for j in range(i, len(height)):
                max_right = max(max_right, height[j])
            min_height = min(max_left, max_right)
            if min_height - height[i]:
                ans += min_height - height[i]
        return ans
class Solution(object):
    def trap(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        if height == []:
            return 0
        pre = []
        after = []
        length = len(height)
        maxval = height[0]
        maxval_after = height[-1]
        for i in range(length):
            if height[i] <= maxval:
                pre.append(maxval)
            else:
                pre.append(height[i])
                maxval = height[i]
            if height[length-1-i] <= maxval_after:
                after.insert(0,maxval_after)
            else:
                after.insert(0,height[length-i-1])
                maxval_after = height[length-i-1]
        ans = 0
        for i in range(length):
            ans += min(pre[i],after[i]) - height[i]
        return ans

results matching ""

    No results matching ""