leetcode hot100 42 接雨水 hard 双指针

记住就完了。。。

python 复制代码
当前的水=min(left_max[i], right_max[i]) - height[i]

先从左往右遍历一遍数组,求出每个位置左边最大的高度

再从右往左遍历一遍数组,求出每个位置右边最大的高度

最后,从左往右遍历数组,每个位置当前的水=min(left_max[i], right_max[i]) - height[i]

python 复制代码
class Solution:
    def trap(self, height: List[int]) -> int:
        n= len(height)

        if not height:
            return 0


         # 保存每个柱子左侧的最高柱子
        left_max = []  # 正向遍历时,不用[0]*n初始化也可以,直接append
        for i in range(0, n, 1):
            if i == 0:
                left_max.append(height[0])    # 第 0 个柱子左侧最高柱子就是它自己,没有更左边的柱子
            else:
                left_max.append(max(left_max[i-1], height[i]))


        #先初始化列表长度
        right_max = [0]*n

        for i in range(n-1, -1, -1):   # 从右往左 # range语法左闭右开,所以中间是-1才能扫到0
            if i==n-1:
                right_max[i] = height[-1]    # 最后一个柱子右侧最高柱子就是它自己,没有更右边的柱子
            else:
                right_max[i] = max([right_max[i+1], height[i]])


        # 计算积水
        water = 0
        for i in range(n):
            water += min(left_max[i], right_max[i]) - height[i]

        return water
相关推荐
_深海凉_40 分钟前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
踩坑记录2 小时前
leetcode hot100 寻找两个正序数组的中位数 hard 二分查找 双指针
leetcode
superior tigre4 小时前
78 子集
算法·leetcode·深度优先·回溯
superior tigre6 小时前
739 每日温度
算法·leetcode·职场和发展
6Hzlia7 小时前
【Hot 100 刷题计划】 LeetCode 15. 三数之和 | C++ 排序+双指针
c++·算法·leetcode
北顾笙9808 小时前
day37-数据结构力扣
数据结构·算法·leetcode
6Hzlia10 小时前
【Hot 100 刷题计划】 LeetCode 189. 轮转数组 | C++ 三次反转经典魔法 (O(1) 空间)
c++·算法·leetcode
m0_6294947311 小时前
LeetCode 热题 100-----13.最大子数组和
数据结构·算法·leetcode
田梓燊11 小时前
力扣:94.二叉树的中序遍历
数据结构·算法·leetcode
khalil102011 小时前
代码随想录算法训练营Day-38动态规划06 | 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包、总结
数据结构·c++·算法·leetcode·动态规划