leetcode-42. 接雨水(双指针,前缀)

42. 接雨水
/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function (height) {
  let len = height.length;
  let pre_max = new Array(len).fill(0);
  let suf_max = new Array(len).fill(0);

  pre_max[0] = height[0];
  suf_max[len - 1] = height[len - 1];

  for (let i = 1; i < len; i++) {
    pre_max[i] = Math.max(pre_max[i - 1], height[i]);
  }

  for (let j = len - 2; j >= 0; j--) {
    suf_max[j] = Math.max(suf_max[j + 1], height[j]);
  }

  let ans = 0;
  for(let k = 0;k<len;k++){
    let h = height[k];
    let pre = pre_max[k]
    let suf = suf_max[k];

    ans +=(Math.min(pre,suf)-h)
  }

  return ans;
};

console.log(trap([0,1,0,2,1,0,1,3,2,1,2,1]))
console.log(trap([4,2,0,3,2,5]))
执行用时分布
63ms
击败69.22%使用 JavaScript 的用户

消耗内存分布
54.13MB
击败15.49%使用 JavaScript 的用户
class Solution:
    def trap (self, height: List[int])->int:
        n = len(height)
        pre_max = [0]*n
        pre_max[0] = height[0]
        suf_max = [0]*n
        suf_max[-1] = height[-1]
    
        for i in range(1,n):
            pre_max[i]=max(pre_max[i-1],height[i])
        
        for i in range(len-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
  • 优化空间复杂度O(1)
/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
  let len = height.length;
  let left = 0,right = len-1;

  let pre_max = 0,suf_max = 0;
  let ans = 0;
  while(left<=right){
    pre_max = Math.max(pre_max,height[left])
    suf_max = Math.max(suf_max,height[right])

    if(pre_max<suf_max){
        ans += pre_max-height[left]
        left++
    }else{
        ans += suf_max-height[right]
        right--
    }
  }

  return ans;
};
执行用时分布
46ms 击败99.34%
使用 JavaScript 的用户

消耗内存分布
49.84MB击败98.37%
使用 JavaScript 的用户
参考链接

42. 接雨水

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SQL】SQL常见面试题总结(3)

目录 1、聚合函数1.1、SQL 类别高难度试卷得分的截断平均值&#xff08;较难&#xff09;1.2、统计作答次数1.3、得分不小于平均分的最低分 2、分组查询2.1、平均活跃天数和月活人数2.2、月总刷题数和日均刷题数2.3、未完成试卷数大于 1 的有效用户&#xff08;较难&#xff09…

[数据集][目标检测]结直肠息肉内镜图像病变检测数据集13524张2类别

数据集共分为2个版本&#xff0c;即A版和B版&#xff0c;两个版本图片数一样&#xff0c;数据集图片不存在重叠文件名也不存在重复&#xff0c;可以合并训练&#xff0c;也可以单独训练。 下面是信息介绍&#xff1a; 结直肠息肉内镜图像病变检测数据集13524张2类别A版 数据…

东莞酷得电子方案 遥控水弹坦克车

首先遥控小车是一种能够通过无线遥控器进行远程操控的小型机器人。遥控小车应用了哪些软硬件技术呢&#xff1f;本文将从以下几个方面进行详细介绍。 遥控小车应用了多种软硬件技术&#xff0c;涉及底盘结构、动力系统、传感器、控制器等多个方面。 底盘结构&#xff1a;遥控…

蓝桥杯 EDA 组 历届国赛真题解析

一、2021年国赛真题 1.1 CN3767 太阳能充电电路 CN3767 是具有太阳能电池最大功率点跟踪功能的 4A&#xff0c;12V 铅酸电池充电管理集成电路。 最大功率点应指的是电池板的输出电压&#xff0c;跟踪电压其做保护。当然 CN3767 也可以直接使用直流充电&#xff0c;具体可以阅读…

openEuler 22.03安装单机版oracle 19c(附录所有patch包)

客户要在OpenEuler 22.0.3 LTS上安装的19.3.0.0 ,在安装到11%的时候报错all_no_orcl错误,我们知道欧拉底层是rhel9,这些错误其实经常接触都知道肯定是各种软件包的版本不对导致的,但是各种依赖太多了也不好解决,最后在官网有所发现: Requirements for Installing Oracle Datab…

未授权访问:Rsync 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、利用rsync下载任意文件 5、利用rsync反弹shell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c…

QCustomplot---动态图

QCustomplot绘制动态曲线图-游标及鼠标跟踪显示数值_qcustomplot 游标-CSDN博客 m_timer new QTimer(this);connect(m_timer,SIGNAL(timeout()),this,SLOT(slotTimeout()));m_timer->start(50); void MainWindow::slotTimeout() {static int p0;static int i0;double m,m1…

ubuntu中如何删除常规匹配不到的乱码目录文件

原因是之前误操作创建了多个带空格的gerrit仓库的时候导致的服务器乱码&#xff0c;进入geriit服务器可以查看到如下的一个异常目录&#xff0c;常规rm -rf 操作的时候是匹配不到这个目录的。 这时候我们应该考虑使用inode的性质来匹配删除。 注&#xff1a;在Linux文件系统中…

【设计模式】JAVA Design Patterns——Acyclic Visitor(非循环访问者模式)

&#x1f50d;目的 允许将新功能添加到现有的类层次结构中&#xff0c;而不会影响这些层次结构&#xff0c;也不会有四人帮访客模式中那样循环依赖的问题。 &#x1f50d;解释 真实世界例子 我们有一个调制解调器类的层次结构。 需要使用基于过滤条件的外部算法&#xff08;是…

python中内置函数简要介绍

pyton3.11版本中常用的内置函数&#xff0c;不需要导入&#xff0c;可直接使用。这些函数大多数都是比较常用的&#xff0c;很多在之前的文章都有介绍过。 大家也可直接到官网查看学习 https://docs.python.org/zh-cn/3.11/library/functions.html。 内置函数 abs() min() …

力扣/leetcode383.比特位记数

题目描述 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 代码思路 第一种方法 最简单的方法就是&#xff0c;遍历然后使用python自带的bin()方法直接…

UART 16550 IP核使用详解

AXI UART 16550是Xilinx FPGA中提供的一个UART IP核&#xff0c;它允许通过AXI接口与UART设备进行通信。本文描述了如何使用Xilinx的Vivado Design Suite环境中的工具来定制和生成 UART 16550 IP核&#xff0c;以及如何配置和使用该IP核。 1 UART 16550 IP核的使用 以下是针对…

[数据集][目标检测]蕃茄核桃桔子龙眼青枣5种水果检测数据集VOC+YOLO格式270张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;270 标注数量(xml文件个数)&#xff1a;270 标注数量(txt文件个数)&#xff1a;270 标注类别…

logger使用,解决中文乱码问题,重复缓存问题

目的 在模型训练过程中&#xff0c;想把控制台内容输出的内容缓存起来&#xff0c;以便后期检查使用&#xff0c;就用起了logger。用的时候遇到过中文乱码问题以及重复缓存问题&#xff08;即后面的logger对象将前面的logger对象缓存内容也缓存下来了&#xff09;。 解决方法…

SerDes系列之电路技术概述

现在的高速电路设计中&#xff0c;SerDes的应用几乎无处不在&#xff0c;如下图所示的一款SoC&#xff0c;其外设接口除了少量普通的IO&#xff0c;几乎都是SerDes专用接口&#xff0c;因此&#xff0c;电路设计中对于SerDes接口电路的熟知程度&#xff0c;几乎就决定了设计的成…

小米电脑管家-非小米电脑安装教程

​​第一步&#xff1a;去浏览器搜索小米跨终端智联官网 下载小米电脑管家 如果是小米电脑&#xff0c;直接安装就行了 这里主要讲的是不是小米电脑&#xff0c;怎么去安装&#xff1f; 不是小米电脑就需要下载免检测机型插件&#xff0c;不然安装不了的 第二步&#xff1a;…

[Algorithm][回溯][字母大小写全排列][优美的排列][N皇后]详细讲解

目录 1.字母大小写全排列1.题目链接2.算法原理详解3.代码实现 2.优美的排列1.题目链接2.算法原理详解3.代码实现 3.N 皇后1.题目链接2.算法原理详解3.代码实现 1.字母大小写全排列 1.题目链接 字母大小写全排列 2.算法原理详解 本题逻辑与子集大致相同 思路一&#xff1a;每…

STM32-08-串口

文章目录 STM32 串口1. 数据通信的基本概念2. 串口通信协议3. 串口4. 相关寄存器5. MSP回调机制6. HAL库中断回调机制7. USART/UART异步通信配置步骤8. IO引脚复用功能9. 代码实现 STM32 串口 1. 数据通信的基本概念 通信方式&#xff1a; 数据传输方向&#xff1a; 数据同…

革命性GPT-4o:重塑人机交互体验

OpenAI 发布的 GPT-4o 模型无疑是一个巨大的突破&#xff0c;特别是在其能够处理多种输入媒介&#xff08;文本、音频、图像&#xff09;并生成相应输出方面。这种能力使得人机交互更加自然和直观&#xff0c;极大地提升了 AI 的实用性和可用性。GPT-4o 的几个关键亮点包括&…

Springboot+Vue项目-基于Java+MySQL的火锅店管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…