NO42. 接雨水



#最近的算法都是考查思维而不是特定算法,值得一试 #按层 class Solution: def trap(self, height: List[int]) -> int: n=len(height) left,right=0,n-1 tmp,high=0,1 while(left<=right): while(left<=right and height[left]<high): left+=1
#动态规划- 状态转移方程-求每柱的左右侧最大高度
#想法求出每个左右最大高度,再用最小的去减去现在高度因为能接住水的是最短的那条
class Solution:
    def trap(self, height: List[int]) -> int:
        n = len(height)
        max_left = [height[0]] * n
        max_right = [height[-1]] * n
        res = 0
        for i in range(1, n):
            max_left[i] = max(max_left[i - 1], height[i])
            max_right[n - i - 1] = max(max_right[n - i], height[n - i - 1])
        for i in range(n):
            res += min(max_left[i], max_right[i]) - height[i]
        return res 
# 双指针
        ans = 0
        left, right = 0, len(height) - 1
        leftMax = rightMax = 0
        while left < right:
            leftMax = max(leftMax, height[left])
            rightMax = max(rightMax, height[right])
            if height[left] < height[right]:
                ans += leftMax - height[left]
                left += 1
            else:
                ans += rightMax - height[right]
                right -= 1
        return ans

 

logo
 
posted @ 2022-07-21 17:19  是冰美式诶  阅读(78)  评论(0)    收藏  举报