Leetcode-.42接雨水

动态规划,记录i数组前后缀的最大值

python 复制代码
class Solution:

    def trap(self, height: List[int]) -> int:

        n=len(height)

        pre_max=n*[0]

        pre_max[0]=height[0]

        for i in range(1,n):

            pre_max[i]=max(pre_max[i-1],height[i])

        suf_max=[0]*n

        suf_max[-1]=height[-1]

        for i in range (n-2,-1,-1):

            suf_max[i]=max(suf_max[i+1],height[i])

        ans=0

        for h,pre,suf in zip(height,pre_max,suf_max):

            ans+=min(pre,suf)-h
  
        return ans
  • pre_max[i]:表示从最左边到当前位置 i 为止的最大柱子高度;
    pre_max[i]=max⁡(height[0],height[1],...,height[i])pre\_max[i]=max⁡(height[0],height[1],...,height[i])pre_max[i]=max⁡(height[0],height[1],...,height[i])
  • suf_max[i]:表示从当前位置 i 到最右边 的最大柱子高度;
    suf_max[i]=max⁡(height[i],height[i+1],...,height[n−1])suf\_max[i]=max⁡(height[i],height[i+1],...,height[n−1])suf_max[i]=max⁡(height[i],height[i+1],...,height[n−1])

对于下标 i,下雨后水能到达的最大高度等于下标 i 两边的最大高度的最小值,下标 i 处能接的雨水量等于下标 i 处的水能到达的最大高度减去 height[i]。

相关推荐
liu****10 分钟前
29.路径类dp
c++·算法·acm
JMchen12311 分钟前
Android计算摄影实战:多帧合成、HDR+与夜景算法深度剖析
android·经验分享·数码相机·算法·移动开发·android-studio
阿猿收手吧!17 分钟前
【C++】C++模板特化:精准定制泛型逻辑
开发语言·c++·算法
智驱力人工智能31 分钟前
货车走快车道检测 高速公路安全治理的工程实践与价值闭环 高速公路货车占用小客车道抓拍系统 城市快速路货车违规占道AI识别
人工智能·opencv·算法·安全·yolo·目标检测·边缘计算
喵手41 分钟前
Python爬虫实战:电商实体消歧完整实战 - 从混乱店铺名到标准化知识库的工程化实现,一文带你搞定!
爬虫·python·算法·爬虫实战·零基础python爬虫教学·同名实体消除·从混乱店铺名到标准化知识库
weixin_4521595544 分钟前
C++与Java性能对比
开发语言·c++·算法
80530单词突击赢1 小时前
C++哈希表实现:开散列与闭散列详解
算法·哈希算法·散列表
Timmylyx05181 小时前
类欧几里得学习笔记
笔记·学习·算法
wangluoqi1 小时前
26.2.2练习总结
算法
2301_765703141 小时前
C++中的工厂模式实战
开发语言·c++·算法