(leetcode学习)42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

复制代码
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 

示例 2:

复制代码
输入:height = [4,2,0,3,2,5]
输出:9

提示:

  • n == height.length
  • 1 <= n <= 2 * 104
  • 0 <= height[i] <= 105

通过这个题学习一下单调栈。

cpp 复制代码
class Solution {
public:
    int trap(vector<int>& height) {
        stack<int> stk;
        int res = 0, n=height.size();

        for(int i=0; i<n; i++){
            while(!stk.empty() && height[ stk.top() ] <= height[i]){
                    int midh = height[stk.top()];
                    stk.pop();
                    if(stk.empty()) continue;
                    int lh = height[stk.top()], w = i - stk.top() - 1;
                    res += (min(lh, height[i]) - midh)*w;
                }
                stk.push(i);
            }
            return res;
        }
};
相关推荐
糕......5 分钟前
Java异常处理完全指南:从概念到自定义异常
java·开发语言·网络·学习
好奇龙猫8 分钟前
【人工智能学习-AI-MIT公开课-第5. 搜索:最优、分支限界、A**】
人工智能·学习
我找到地球的支点啦9 分钟前
Matlab系列(006) 一利用matlab保存txt文件和读取txt文件
开发语言·算法·matlab
Dev7z22 分钟前
基于Matlab实现GRACE卫星重力数据的全球水储量变化估算与分析
人工智能·算法·matlab
stars-he36 分钟前
FPGA学习笔记(7)以太网UDP数据报文发送电路设计(一)
笔记·网络协议·学习·fpga开发·udp
爱喝热水的呀哈喽1 小时前
11题目汇总
算法
峥嵘life1 小时前
2026 Android EDLA 认证相关资源网址汇总(持续更新)
android·java·学习
熬夜造bug1 小时前
LeetCode非Hot100高频题(2)——常见LeetCode手撕
学习
Aliex_git1 小时前
Vue2 - Watch 侦听器源码理解
前端·javascript·vue.js·笔记·学习
三斗米1 小时前
Transformer入门:一文读懂《Attention Is All You Need》
算法·架构