【LeetCode 面试经典150题】42. Trapping Rain Water 接雨水

42. Trapping Rain Water

题目大意

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining.
在这里插入图片描述

中文释义

给定 n 个非负整数,代表以宽度为 1 的条形图的高程图,计算下雨后它能接多少雨水。

Example

Example 1:

  • Input: height = [0,1,0,2,1,0,1,3,2,1,2,1]
  • Output: 6
  • Explanation: 上述高程图(黑色部分)由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示。在这种情况下,被接的雨水量(蓝色部分)为 6 单位。

Example 2:

  • Input: height = [4,2,0,3,2,5]
  • Output: 9

Constraints

  • n == height.length
  • 1 <= n <= 2 * 10^4
  • 0 <= height[i] <= 10^5

解题思路

算法描述

  • 这段代码的目的是计算在一个给定的高程图中能够接多少雨水。

  • 第i个位置能接多少雨水,取决于 i 位置左边最大的元素 和 i 位置右边最大的元素。

  • 设置 left[i] 数组记录 i 位置左边最大元素。

  • 设置 right[i] 数组记录 i 位置右边最大元素。

  • i 位置接水量 = min(left[i], right[i]) - height[i]

算法的关键步骤如下:

  1. 初始化两个辅助数组:

    • 创建两个数组 leftright,分别用于存储每个位置左侧和右侧的最高高度。
    • 初始化 left[0]right[size - 1] 为 -1,表示最左端和最右端没有高程。
  2. 从左至右计算最高高程:

    • 遍历数组 height,从左到右填充 left 数组。
    • 对于每个位置 ileft[i] 存储 i 左侧的最高高程。
  3. 从右至左计算最高高程:

    • 反向遍历数组 height,从右到左填充 right 数组。
    • 对于每个位置 jright[j] 存储 j 右侧的最高高程。
  4. 计算接雨水量:

    • 遍历数组 height,从第二个位置到倒数第二个位置。
    • 计算每个位置能接的雨水量,等于 min(left[i], right[i]) - height[i]
    • 如果计算结果大于0,累加到 sum
  5. 返回结果:

    • 最后返回累加的雨水量 sum

代码实现

class Solution {
public:int trap(vector<int>& height) {int size = height.size();int left[size], right[size];left[0] = right[size - 1] = -1;for (int i = 1; i < size; i++) {left[i] = max(left[i - 1], height[i - 1]);}for (int j = size - 2; j >= 0; j--) {right[j] = max(right[j + 1], height[j + 1]);}int sum = 0;for (int i = 1; i < size - 1; i++) {int temp = min(left[i], right[i]) - height[i];if (temp > 0) {sum += temp;}}return sum;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang并发编程-channel

在golang 并发编程里&#xff0c;经常会听到一句话&#xff1a;不要通过共享内存进行通信&#xff0c;通过通信来共享内存。下面我们会介绍下channel, 通过源码的方式去了解channel是怎么工作的。 基本结构 流程图 代码解读 type hchan struct {qcount uint // …

晓源|算法专栏

文章目录 数据结构1.栈1.1 单调栈1.2括号匹配问题 2.树形结构2.1二叉树2.1.1树形DP 3.动态规划3.1 背包3.2 LIS ERRORheap-buffer-overflow 数据结构 1.栈 1.1 单调栈 单调栈内的元素具有单调性质&#xff0c;要么单调递增&#xff0c;要么单调递减。 1.2括号匹配问题 921…

工作纪实42-内存泄漏(线上问题大乱斗)

还没找到原因&#xff0c;监控里面发现实例的内存使用率每天增加5%&#xff0c;这两天排查一下&#xff0c;mark一下; 下午看了几个小时&#xff0c;泄漏大概率是乌龙事件了&#xff01; 为何我有这样的疑惑&#xff1a; 上线完后面几天内存一直在增加&#xff0c;没有减少&…

【C程序设计】C循环

有的时候&#xff0c;我们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多次执行一个…

CMake入门教程【核心篇】查找包(find_package)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1.使用方法1.1基本用…

Allegro看不到PCB元件的丝印和装配层

#创作灵感# PCB板到处Gerber文件加工回来&#xff0c;板子上没有元件边框丝印&#xff0c;但是有元件编号。因为只是样板&#xff0c;影响不大&#xff0c;就没有当回事。直到发出去贴片&#xff0c;发送了钢网层和装配层&#xff0c;反馈说不知道元器件的极性。这就纳闷了&…

大创项目推荐 深度学习人脸表情识别算法 - opencv python 机器视觉

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…

Qt菜单工具栏和状态栏

QMenuBar 接口介绍 QAction 定义&#xff1a;QAction 是一个独立于具体界面元素的抽象动作表示。它封装了一个用户界面动作&#xff08;比如点击命令&#xff09;&#xff0c;通常与一个菜单项、工具栏按钮或快捷键相关联。用途&#xff1a;你可以将 QAction 视为一个可执行的…

springboot整合springbatch批处理

springboot整合springbatch实现批处理 简介项目搭建步骤 简介 项目搭建 参考博客【场景实战】Spring Boot Spring Batch 实现批处理任务&#xff0c;保姆级教程 步骤 1.建表 建表sql CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL C…

手把手将ReactJS项目部署到Ubuntu

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 1.构建项目 npm run build 生成build目录&#xff1a; 2.上传项目 将build目录上传到Ubuntu。 可以使用Xftp工具。 3.启动项目 npm install -g serve serve -s …

.mallox勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言&#xff1a; 随着技术的不断发展&#xff0c;网络空间也不可避免地面临着各种威胁&#xff0c;其中之一就是勒索病毒&#xff0c;而.mallox是近期引起关注的一种恶意软件。本文将介绍.mallox勒索病毒&#xff0c;以及如何有效地恢复被其加密的数据文件&#xff0c;并提供…

Java后端开发——Spring实验

文章目录 Java后端开发——Spring实验一、Spring入门1.创建项目&#xff0c;Spring依赖包。2.创建JavaBean&#xff1a;HelloSpring3.编写applicationContext.xml配置文件4.测试&#xff1a;启动Spring&#xff0c;获取Hello示例。 二、Spring基于XML装配实验1.创建JavaBean类&…