当前位置: 首页 > news >正文

经典面试题(力扣,接雨水)

接雨水

  • 方法一
    • 思路
    • 测试代码
    • 复杂度
    • 测试结果
  • 方法二
    • 思路
    • 测试代码
    • 复杂度
    • 测试结果

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

方法一

思路

我们需要维护一个到当前的前缀最大数组(当前元素的前缀最大的数字),和一个到当前的后缀最大数组(当前元素的后缀最大的数字)。
当我们遍历到当前元素的时候,选出前缀和后缀二者中小的那个减去高度即可,得到当前元素的接住的雨水量.
image.png
比如相对于这个 height = [0,1,0,2,1,0,1,3,2,1,2,1]高度图,
前缀最大数组是 :pre_max:[0,1,1,2,2,2,2,3,3,3,3,3];
后缀最大数组是: sub_max:[3,3,3,3,3,3,3,3,2,2,2,1];
把遍历到的每一个元素当成一个宽度为1的水桶,他的高就是与其索引一样的前缀最大数组和后缀最大数组中的最小的一个。

测试代码

class Solution{public int trap(int[] height) {int ans=0;int n=height.length;//数组前缀最大值int pre_max[]=new int[n];pre_max[0]=height[0];//后缀最大值数组int sub_max[]=new int[n];sub_max[n-1]=height[n-1];for (int i = 1; i <n; i++) {pre_max[i]=Math.max(height[i],pre_max[i-1]);}for (int i = n-2; i >=0; i--) {sub_max[i]=Math.max(height[i],sub_max[i+1]);}for (int i = 0; i <n; i++) {ans+=Math.min(pre_max[i],sub_max[i])-height[i];}return ans;}
}

复杂度

时间复杂度是:O(n),n,是数组的长度,因为只有三个单层for循环。
空间复杂度是:O(n),创建了两个为长度为n的数组。

测试结果

image.png

方法二

思路

我们可以定义两个变量,来维护相对于当前元素的前缀最大值,和后缀最大值。

image.png

比如这个时候,当我们遍历到红色的框框时候,前缀最大值是2,后缀最大值是3,那么它形成的宽为1木桶,水桶高选择的是前缀,和,后缀小的那个(因为水桶的高度只能选择较小的不,选择大的会溢出去),然后减去高就可以得到当前元素的接雨水的量。

测试代码

class Solution {public int trap(int[] height) {//答案和int ans=0;//前缀最大值int pre_max=0;//后缀最大值int sub_max=0;int i=0,j=height.length-1;while (i<j){//更新前缀最大值pre_max=Math.max(pre_max,height[i]);//更新后缀最大值sub_max=Math.max(sub_max,height[j]);if (pre_max<sub_max){//前缀较小,更新答案ans+=pre_max-height[i];i++;}else {//后缀较小或者等于情况,更新答案ans+=sub_max-height[j];j--;}}return ans;}
}

复杂度

时间复杂度是:O(n)
空间复杂度是:O(1)

测试结果

image.png

相关文章:

经典面试题(力扣,接雨水)

接雨水 方法一思路测试代码复杂度测试结果 方法二思路测试代码复杂度测试结果 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]…...

2023年深圳杯数学建模C题无人机协同避障航迹规划

2023年深圳杯数学建模 C题 无人机协同避障航迹规划 原题再现&#xff1a; 平面上A、B两个无人机站分别位于半径为500 m的障碍圆两边直径的延长线上&#xff0c;A站距离圆心1 km&#xff0c;B站距离圆心3.5 km。两架无人机分别从A、B两站同时出发&#xff0c;以恒定速率10 m/s…...

PostgreSQL--实现数据库备份恢复详细教学

前言 这是我在这个网站整理的笔记&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;RodmaChen PostgreSQL--实现数据库备份恢复详细教学 一. 数据库备份二. 数据库恢复三. 存留问题 数据库备份恢复功能是每个产品所需的&#xff0c;以下是简单的脚本案例&a…...

JDK工具之jstack说明

JDK工具之jstack说明 前言什么是jstack&#xff1f;如何使用jstack&#xff1f;获取Java进程的PID分析jstack输出 常用的jstack命令选项jstack的应用场景结论 前言 作为Java开发人员&#xff0c;在开发和维护复杂的Java应用程序时&#xff0c;我们经常会遇到各种各样的问题&am…...

34 | 牛顿迭代法

文章目录 牛顿迭代法一、原理二、Python实现三、练习题四、总结牛顿迭代法 一、原理 牛顿迭代法(Newton’s Method)是一种用于寻找方程的实根的数值方法。其基本思想是通过一系列逼近来求解方程的根。对于方程 f ( x ) = 0 f(x) = 0 f(x...

ChatGPT如何帮助学生学习

​ 一些教育工作者担心学生可能使用ChatGPT作弊。因为这个AI工具能写报告和计算机代码&#xff0c;画出复杂图表……甚至已经有许多学校把ChatGPT屏蔽。 研究发现&#xff0c;学生作弊的主要原因是想考得好。是否作弊与作业和考试的打分方式有关&#xff0c;所以这与技术的便…...

easyexcel导出excel-50行代码搞定大量数据导出

文章目录 一、写在前面二、使用步骤定义导出的数据实体导出 一、写在前面 场景&#xff1a; 当数据量导出过大时如果一次从数据库取出所有数据会导致内存飙升导致系统奔溃&#xff0c;所以我们采取循环读取和循环写入。 准备: mave导入&#xff1a;easyexcel:3.0.5 二、使用…...

OpenAI宣布安卓版ChatGPT正式上线;一站式 LLM底层技术原理入门指南

&#x1f989; AI新闻 &#x1f680; OpenAI宣布安卓版ChatGPT正式上线 摘要&#xff1a;OpenAI今日宣布&#xff0c;安卓版ChatGPT已正式上线&#xff0c;目前美国、印度、孟加拉国和巴西四国的安卓用户已可在谷歌Play商店下载&#xff0c;并计划在下周拓展到更多地区。Chat…...

Rust vs Go:常用语法对比(二)

21. Swap values 交换变量a和b的值 a, b b, a package mainimport "fmt"func main() { a : 3 b : 10 a, b b, a fmt.Println(a) fmt.Println(b)} 103 fn main() { let a 3; let b 10; let (a, b) (b, a); println!("a: {a}, b: {b}", aa,…...

对于Vue3的一些思考

看完 Vue Hooks: 让Vue开发更简单与高效 - 掘金 一些小心得 vue3&#xff1a; 组合式API&#xff08;是利用架构&#xff0c;强制达到拆分目的&#xff09; 达到解耦的目的。对于vue3来说 每个模块的每个逻辑都是 一个一个独立的方法。通过 方法方法整体业务 代码风格&#…...

Bean的生命周期 - spring

前言 本篇介绍了Bean的生命周期&#xff0c;认识PostConstruct注释&#xff0c;PreDestroy注释&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. spring生命周期2. Bean的生命周期3. 为什么先设置…...

入门Linux基本指令(2)

这篇文章主要提供一些对文件操作的Linux基本指令&#xff0c;希望对大家有所帮助&#xff0c;三连支持&#xff01; 目录 cp指令(复制) mv指令(剪切) nano指令 cat指令(打印文件内容) > 输出重定向 >> 追加重定向 < 输入重定向 more指令 less指令(推荐) …...

【C++】【自用】选择题 刷题总结

文章目录 【类和对象】1. 构造、拷贝构造的调用2. 静态成员变量3. 初始化列表4. 成员函数&#xff1a;运算符重载5. 友元函数、友元类55. 特殊类设计 【细节题】1. 构造 析构 new \ deletet、new[] \ delete[] 【类和对象】 1. 构造、拷贝构造的调用 #include using namespace…...

SkyWalking链路追踪-Collector(收集器)

Collector&#xff08;收集器&#xff09; SkyWalking的Collector&#xff08;收集器&#xff09;是SkyWalking链路追踪的核心组件之一。它负责接收来自各个Agent的追踪数据&#xff0c;并将其存储到数据存储器&#xff08;如数据库&#xff09;中。具体来说&#xff0c;Colle…...

typescript自动编译文件实时更新

npm install -g typescripttsc --init 生成tsconfig.json配置文件 tsc -w 在监听模式下运行&#xff0c;当文件发生改变的时候自动编译...

qt6.5 download for kali/ubuntu ,windows (以及配置选项选择)

download and sign in qt官网 sign in onlion Install 1 2 3 4 5...

【JS 原型链】

JavaScript 原型链是一个重要的概念&#xff0c;它是 JavaScript 语言实现面向对象编程的核心。在 JavaScript 中&#xff0c;每个对象都有一个与之关联的原型&#xff0c;并且该对象继承了原型中的属性和方法。这些原型组成了一个原型链&#xff0c;可以通过该链追溯到顶层的 …...

harmonyOS 开发之UI开发(ArkTS声明式开发范式)概述

UI开发&#xff08;ArkTS声明式开发范式&#xff09;概述 基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架&#xff0c;提供了构建OpenHarmony应用UI所必需的能力&#xff0c;主要包括&#xff1a; ArkTS ArkTS是UI开发语言&#xff…...

【人工智能】神经网络、M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义、总代价

M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义 文章目录 M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义M-P 神经元模型激活函数(Activation function)神经网络结构举例训练神经网络学习网络参数代价定义均方误差交叉熵(Cross Entropy)…...

小程序新渲染引擎 Skyline 发布正式版

为了进一步提升小程序的渲染性能和体验&#xff0c;我们推出了一套新渲染引擎 Skyline&#xff0c;现在&#xff0c;跟随着基础库 3.0.0 发布 Skyline 正式版。 我们知道&#xff0c;小程序一直用 WebView 来渲染界面&#xff0c;因其有不错的兼容性和丰富的特性&#xff0c;且…...

自制BLE112串口编程器:基于Bootloader的免调试器烧录方案

1. 项目概述&#xff1a;为BLE112模块打造一款免调试器的RS232编程器在嵌入式开发&#xff0c;特别是早期的蓝牙低功耗&#xff08;BLE&#xff09;模块应用中&#xff0c;我们常常会遇到一个棘手的问题&#xff1a;官方开发工具链的依赖和限制。以Silicon Labs&#xff08;当时…...

为什么92%的团队用DeepSeek生成方案仍需人工重写?揭秘缺失的2个元认知层与1套校验协议

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的团队用DeepSeek生成方案仍需人工重写&#xff1f;揭秘缺失的2个元认知层与1套校验协议 当团队将DeepSeek-R1或DeepSeek-VL模型用于技术方案生成时&#xff0c;表面看响应迅速、逻辑连贯&…...

Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取

Airtest Poco实战&#xff1a;5分钟搞定微信小程序自动化测试环境搭建与元素抓取微信小程序作为轻量级应用的代表&#xff0c;已经渗透到电商、社交、工具等各个领域。随着小程序功能的日益复杂&#xff0c;自动化测试成为保障产品质量的重要手段。本文将带你快速搭建微信小程序…...

CANoe诊断测试没CDD文件怎么办?手把手教你用Fault Memory窗口和CAPL脚本读取解析DTC故障码

CANoe诊断测试无CDD文件的实战解决方案&#xff1a;从Fault Memory到CAPL脚本全解析当CDD文件缺失或定义不清晰时&#xff0c;诊断测试工程师常常陷入困境。本文将深入探讨如何利用Fault Memory窗口的基础功能&#xff0c;并通过CAPL脚本实现更灵活、更强大的故障码读取与解析方…...

企业内统一API网关与Taotoken聚合平台对接方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内统一API网关与Taotoken聚合平台对接方案 在推进AI应用落地的过程中&#xff0c;许多中大型企业面临一个共同挑战&#xff1a…...

PvZ Toolkit终极指南:三步掌握植物大战僵尸最强修改器

PvZ Toolkit终极指南&#xff1a;三步掌握植物大战僵尸最强修改器 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PvZ Toolkit是一款专为植物大战僵尸PC版设计的综合修改器工具&#xff0c;能够让你…...

Windows开机自动全屏打开指定网页?一个快捷方式参数就搞定(Chrome/Edge/Firefox教程)

Windows开机自动全屏展示网页的终极方案每次开机都要手动打开浏览器、输入网址、切换全屏模式&#xff1f;这种重复操作不仅浪费时间&#xff0c;还容易在重要演示时手忙脚乱。想象一下&#xff1a;电脑启动后自动全屏显示你的仪表盘、会议日程或是监控大屏&#xff0c;整个过程…...

2026这6款神级降AIGC平台大公开,一键让AIGC率直逼绝对安全线!

步入 2026 年&#xff0c;学术圈的风向早已不是从前的模样。曾经大家还在为查重率发愁&#xff0c;如今却陷入了更棘手的困境——如何在不破坏论文专业性的前提下&#xff0c;彻底消除 AI 痕迹&#xff1f;随着 AIGC 检测技术不断进化&#xff0c;高校对论文的审核标准也愈发严…...

机器学习在射电天文数据分类中的应用:以MIGHTEE巡天SFG/AGN分类为例

1. 项目概述&#xff1a;当机器学习遇见深空射电巡天在射电天文学领域&#xff0c;我们正经历一场数据洪流。以MeerKAT望远镜阵列主导的MIGHTEE巡天项目为例&#xff0c;其在COSMOS天区的一次早期科学数据释放&#xff0c;就在不到1平方度的天区内探测到了超过6000个射电源。传…...

招行+工行:ReAct(Reasoning + Acting) 讲清楚,并结合 金融场景(含自进化智能体) 给出可直接用的案例

下面我把 ReAct&#xff08;Reasoning Acting&#xff09; 讲清楚&#xff0c;并结合 ** 金融场景&#xff08;含自进化智能体&#xff09;** 给出可直接用的案例与话术&#xff0c;适合分享 / 汇报。一、ReAct 是什么&#xff08;一句话&#xff09;ReAct 推理&#xff08;T…...