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
相关推荐
圣保罗的大教堂1 天前
leetcode 3650. 边反转的最小路径总成本 中等
leetcode
木井巳1 天前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝
We་ct1 天前
LeetCode 30. 串联所有单词的子串:从暴力到高效,滑动窗口优化详解
前端·算法·leetcode·typescript
历程里程碑1 天前
子串----和为K的子数组
大数据·python·算法·leetcode·elasticsearch·搜索引擎·哈希算法
YuTaoShao1 天前
【LeetCode 每日一题】2976. 转换字符串的最小成本 I
算法·leetcode·职场和发展
我是咸鱼不闲呀1 天前
力扣Hot100系列16(Java)——[堆]总结()
java·算法·leetcode
YuTaoShao1 天前
【LeetCode 每日一题】2977. 转换字符串的最小成本 II——(解法一)记忆化搜索
算法·leetcode·职场和发展
希望有朝一日能如愿以偿1 天前
力扣每日一题
数据结构·算法·leetcode
草履虫建模1 天前
力扣算法分析 27.移除元素
java·开发语言·数据结构·后端·算法·leetcode·排序算法
im_AMBER1 天前
Leetcode 109 链表的中间结点 | 删除链表的中间节点
数据结构·学习·算法·leetcode·链表