首页 > 其他分享 >42. 接雨水

42. 接雨水

时间:2023-03-18 11:11:06浏览次数:33  
标签:边界 42 雨水 height ans st 单调 left

题目描述

柱子的宽度是1,高度存在数组中,问如果按照此排列,下雨后能接多少雨水

f1-单调栈

基本分析

  1. 要计算能存雨量,需要左边界的高度>=当前标高,需要用什么结构来维护?结构是单调的
  2. 又由于可能当前标高是逐渐递增考虑的,不是只计算一次,结构需要从右边添加或者右边弹出?栈
  3. 用单调栈怎么模拟计算的过程?(1)追加元素的情况:栈是空或者栈追加i处的索引后,依然满足单调递减,就一直追加;(2)计算答案的情况:否则就要把栈顶的top弹出来,计算以st[-1]为左边界,h[top]为底,i为右边界的区间的面积;计算完以后如果还是满足while的条件,就继续弹出重复操作;(3)为什么栈空的时候有个break?此刻没有左边界了,肯定不用再考虑

代码

class Solution:
    def trap(self, height: List[int]) -> int:
        ans = 0
        st = []

        for i, h in enumerate(height):
            while st and height[st[-1]] < h:
                cur = st.pop()
                if not st:
                    break
                left = st[-1]
                w = i - left - 1
                d = min(height[left], h) - height[cur]
                ans += w * d
            st.append(i)
        
        return ans

总结

  1. 栈内存的是索引,索引对应的值是单调递减的(非严格,可以=)
  2. 弹出和插入的操作都是在右边完成的

其他方法:待补充

标签:边界,42,雨水,height,ans,st,单调,left
From: https://www.cnblogs.com/zk-icewall/p/17229584.html

相关文章

  • java进阶 包装类 -Integer -字符串转整数存入数组案例 42
              packagecom.cyjt97.inGer;publicclassInGer{publicstaticvoidmain(String[]args){//手动封箱//......
  • CF1742D Coprime 注意数据范围,巧妙解答
      因为n最多有2e5,如果暴力枚举,O(n2) 并不优秀。题中,ai数据范围最多1000,所以可以找1000以内互质的 数,然后判断这两个数是否在数组里面,然后更新答案,可以用函数求最......
  • 1425. 带限制的子序列和
    题目描述数组值可以是负,需要返回一个非空的子序列和的最大值。其中对子序列的要求是相邻两个元素的原始下标不能超过kf1-dp+单调队列优化基本分析1.怎么联想到dp?对某......
  • P42节表
    联合体特点:1、联合体的成员是共享内存空间的 2、联合体的内存空间大小是联合体成员中对内存空间大小要求最大的空间大小 3、联合体最多只有一个成员有效(空间分配) uni......
  • 407. 接雨水 II (Hard)
    问题描述407.接雨水II(Hard)给你一个mxn的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。示例1:输入:heigh......
  • LeetCode242. 有效的字母异位词
    题目描述:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若 s和t 中每个字符出现的次数都相同,则称 s和t 互为字母异位词。示例 1:......
  • 代码随想录算法训练营Day42 动态规划
    代码随想录算法训练营代码随想录算法训练营Day40动态规划|01背包问题,你该了解这些!01背包问题,你该了解这些!滚动数组416.分割等和子集01背包问题,你该了解这些!完......
  • mysql ERROR 3948 (42000): Loading local data is disabled; this must be enabled o
    mysql>selectversion();+-----------+|version()|+-----------+|8.0.20|+-----------+1rowinset(0.00sec)使用loaddata导入数据时候报错......
  • LeetCode142. 环形链表 II
    题目描述:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中......
  • 【洛谷】P4206 [NOI2005] 聪聪与可可(概率+记忆化搜索)
    原题链接题意给定一张\(n\)个节点\(m\)条边的无向图,初始时,A_zjzj在\(S\),fxt在\(T\),现在A_zjzj要前去抓住fxt。A_zjzj只会往使得两人的最短距离减\(1\)......