力扣热门100题之接雨水【困难】

news2024/10/7 0:27:45

题目描述

给定 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

解法1 按列计算

/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
    let area=0;
    let leftMax=0;
    let rightMax=0;
    for(let i=0;i<height.length;i++){
          rightMax=findRightMax(leftMax,i,height);
         if(height[i]<leftMax&&rightMax>height[i]){
             area+=Math.min(leftMax,rightMax)-height[i];
         }
         else if(!findRightMax(leftMax,i,height)){
             leftMax=height[i];
         }
         if(height[i]>leftMax) leftMax=height[i];
    }
    return area;
};
function findRightMax(num,j,height){
    let n=0;
    for(let i=j;i<height.length;i++){
        if(height[i]>=num){
            return height[i];
        }
        if(height[i]>n)n=height[i]
    }
    return n;
}

执行结果:
在这里插入图片描述
解法2:双指针解法【注意理解】

/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
   let area=0;
   if(height.length<=1) return 0;
   let left=0;
   let leftMax=0;
   let right=height.length-1;
   let rightMax=0;
   while(left<right){
       leftMax=Math.max(leftMax,height[left]);
       rightMax=Math.max(rightMax,height[right]);
       if(height[left]<height[right]){
           area+=leftMax-height[left];
           left++;
       }else{
           area+=rightMax-height[right];
           right--;
       }
    
   }
   return area;
};
    

执行情况:
在这里插入图片描述
解法3:单调栈【参照力扣官方】

/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
   let area=0;
   if(height.length<=1) return 0;
   const stack=[]//存值值单调递减的下标
   for(let i=0;i<height.length;i++){
       while(stack.length&&height[i]>height[stack[stack.length-1]]){
           let top=stack.pop();
           if(stack.length==0){
               break;
           }
            const left = stack[stack.length - 1];
            const currWidth = i - left - 1;
            const currHeight = Math.min(height[left], height[i]) - height[top];
            area += currWidth * currHeight;
       }
       stack.push(i);
   }
   return area;
};
    

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用GPT作为SQL查询引擎的自然语言

​生成的AI输出并不总是可靠的&#xff0c;但是下面我会讲述如何改进你的代码和查询的方法&#xff0c;以及防止发送敏感数据的方法。与大多数生成式AI一样&#xff0c;OpenAI的API的结果仍然不完美&#xff0c;这意味着我们不能完全信任它们。幸运的是&#xff0c;现在我们可以…

Packet Tracer – 配置动态 NAT

Packet Tracer – 配置动态 NAT 拓扑图 目标 第 1 部分&#xff1a;配置动态 NAT 第 2 部分&#xff1a;验证 NAT 实施 第 1 部分&#xff1a; 配置动态 NAT 步骤 1&#xff1a; 配置允许的流量。 在 R2 上&#xff0c;为 ACL 1 配置一个语句以允许属于 172.16.0.…

【JVM】浅看JVM的运行流程和垃圾回收

1.JVM是什么 JVM&#xff08; Java Virtual Machine&#xff09;就是Java虚拟机。 Java的程序都运行在JVM中。 2.JVM的运行流程 JVM的执行流程&#xff1a; 程序在执行之前先要把java代码转换成字节码&#xff08;class文件&#xff09;&#xff0c;JVM 首先需要把字节码通过…

Visio/PPT/Matlab输出300dpi以上图片【满足标准投稿要求】

1. visio 遵照如下输出选项&#xff0c;另存为tif格式文件时&#xff0c;选择正确输出便是300dpi以上 2. matlab 文件选项选中导出设置&#xff0c;在渲染中选择dpi为600&#xff0c;导出图片即可&#xff0c;科研建议选择tif格式文件 3.ppt 打开注册表&#xff0c;winr键…

【报错】在python3.9环境下安装sqlmap报错

问题描述 报错内容&#xff1a; missing one or more core extensions (‘ssl’, ‘sqlite3’) most likely because current version of Python has been built without appropriate dev packages 原因分析&#xff1a; 缺少一个或多个核心扩展&#xff08;‘ssl’、‘sqlit…

常见的栈溢出StackOverFlow 与 内存溢出OutOfMemory的区别

0、前言&#xff1a;内存模型 对于多线程运行情况下的jvm内存&#xff0c;我们应当知道&#xff1a; 每创建一个线程&#xff0c;jvm就会为其分配一块线程私有的工作内存&#xff0c;其中包括程序计数器、栈&#xff0c;等等。 对于每一个线程私有的栈&#xff0c;当线…

怎么限制文件打开次数、打开时间?

一些公司出于业务需求&#xff0c;可能会给客户或者合作伙伴发一些涉密图纸、文档、文件等重要文件&#xff0c;但是又不想文件被外发泄露随意传播&#xff0c;今天就教大家一个方法限制文件外发后别人打开这个文件的打开次数、打开时间、另存为等操作。 设置方法 本篇文章测试…

page _refcount和_mapcount字段

linux page有两个非常重要的引用计数字段_refcount和_mapcount&#xff0c;都是atomic_t类型&#xff0c;其中&#xff0c;_refcount表示内核中应用该page的次数。当_refcount 0时&#xff0c;表示该page为空闲或者将要被释放。当_refcount > 0&#xff0c;表示该page页面已…

APP-脱壳+反编译

APP反编译加固-自动查壳脱壳 为什么要脱壳&#xff1f; 因为不脱壳无法进行反编译 查壳工具&#xff1a;https://pan.baidu.com/s/1rDfsEvqQwhUmep1UBLUwSQ 密码: wefd 脱壳工具&#xff1a;https://github.com/CodingGay/BlackDex 查壳演示&#xff1a; 使用Java运行jar包&a…

浙江大学软件学院2022保研经历分享

首先&#xff0c;我想强调一点&#xff0c;如果我们只是一个普通的非211&#xff0c;985的本科生&#xff0c;一定要参加浙江大学每年7月份组织的夏令营&#xff0c;因为浙大的夏令营是一个海王营&#xff0c;基本上不会对入营的学生做筛选&#xff0c;但是要想获得优秀营员&am…

pandas笔记:groupby整理

0 数据集 # Visual Python: Data Analysis > File vp_df pd.read_csv(https://raw.githubusercontent.com/visualpython/visualpython/main/visualpython/data/sample_csv/fish.csv) vp_df 1 单列聚合 vp_df.groupby(Type)[Kg].mean()Type mackerel 1.417456 salmon…

【C语言项目】三子棋

文章目录 项目思路一、分文件进行创建二、进入游戏前的目录2.1 目录的功能&#xff1a;2.2 目录界面&#xff1a;2.3 选择进入或退出游戏2.4 多次重玩功能 三、画出棋盘3.1 写出棋子3.2 初始化棋盘3.2 画出棋盘的框架3.3 代码实现 四、玩家落子4.1 落子逻辑4.2具体情况分类讨论…

初识C++(下)——“C++”

各位CSDN的uu们你们好呀&#xff0c;今天终于是小雅兰的初识C的下的文章啦&#xff0c;下面&#xff0c;让我们进入C的世界吧&#xff01;&#xff01;&#xff01; 内联函数 我们首先得知道&#xff1a;C中的内联函数是用来解决C语言中宏的坑的&#xff01;&#xff01;&…

jenkins中配置了发送邮件,构建后却没有发邮件Not sent to the following valid addresse

【问题描述】&#xff1a;jekins中配置了发送邮件&#xff0c;构建后却没有发邮件的问题&#xff0c;构建报错&#xff1a;Not sent to the following valid addresse 【报错显示】&#xff1a; 【问题定位】&#xff1a;Extended E-mail Notification中&#xff0c;没有配置…

【Docker】Docker的使用案例以及未来发展、Docker Hub 服务、环境安全的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

LabVIEW - 串口通信

1. 题目 使用并行程序设计技术&#xff0c;实现串口通信/TCP通信/UDP通信&#xff08;任选3者一种&#xff0c;其中TCP为客户端&#xff09;数据发送和数据接收功能在各自的线程中实现&#xff0c;即一个线程只管处理数据发送功能的实现&#xff0c;另一个线程只管数据接收和数…

P2698 [USACO12MAR] Flowerpot S

P2698 [USACO12MAR] Flowerpot S 文章目录 P2698 [USACO12MAR] Flowerpot S题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路分析code [P2698 USACO12MAR] Flowerpot S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 Farmer John has been having …

【漏洞复现】厦门才茂通信网关formping远程命令执行漏洞

文章目录 前言声明一、漏洞描述二、漏洞复现 前言 厦门才茂通信网关formping存在远程命令执行漏洞&#xff0c;攻击者可通过特定payload对目标服务器发起攻击&#xff0c;造成不可估量的影响。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提…

文心一言 VS 讯飞星火 VS chatgpt (65)-- 算法导论6.5 4题

四、在 MAX-HEAP-INSERT 的第 2行&#xff0c;为什么我们要先把关键字设为 -∞ &#xff0c;然后又将其增加到所需的值呢? 文心一言&#xff1a; 在 MAX-HEAP-INSERT 算法的第二行将关键字设为 -∞&#xff0c;是为了保持堆的性质。堆是一种二叉树结构&#xff0c;其中每个节…

python调用文心千帆大模型

一、登录智能云控制台 https://console.bce.baidu.com/ 二、创建AI应用 已登录状态下&#xff0c;进入控制台创建应用 https://console.bce.baidu.com/ai/#/ai/easydlLiteNlp/app/list 应用创建后获取AppID、API Key、Secret Key 三、API调用 import requests import jso…