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

Leetcode-407. Trapping Rain Water II [C++][Java]

目录

一、题目描述

二、解题思路

【C++】

【Java】


Leetcode-407. Trapping Rain Water IIhttps://leetcode.com/problems/trapping-rain-water-ii/description/

一、题目描述

Given an m x n integer matrix heightMap representing the height of each unit cell in a 2D elevation map, return the volume of water it can trap after raining.

Example 1:

Input: heightMap = [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]]
Output: 4
Explanation: After the rain, water is trapped between the blocks.
We have two small ponds 1 and 3 units trapped.
The total volume of water trapped is 4.

Example 2:

Input: heightMap = [[3,3,3,3,3],[3,2,2,2,3],[3,2,1,2,3],[3,2,2,2,3],[3,3,3,3,3]]
Output: 10

Constraints:

  • m == heightMap.length
  • n == heightMap[i].length
  • 1 <= m, n <= 200
  • 0 <= heightMap[i][j] <= 2 * 104

二、解题思路

最小堆+BFS

  • 时间复杂度O(mnlog(mn))

  • 空间复杂度O(mn)

【C++】

class Solution {
private:int dirs[5] = {-1, 0, 1, 0, -1};
public:int trapRainWater(vector<vector<int>>& heightMap) {if (heightMap.size() < 3 || heightMap[0].size() < 3) {return 0;}int m = heightMap.size(), n = heightMap[0].size(), res = 0;priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;vector<vector<bool>> visit(m, vector<bool>(n, false));for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {pq.push({heightMap[i][j], i * n + j});visit[i][j] = true;}}}while (!pq.empty()) {pair<int, int> cur = pq.top(); pq.pop();for (int k = 0; k < 4; ++k) {int nx = cur.second / n + dirs[k], ny = cur.second % n + dirs[k + 1];if (nx >= 0 && nx < m && ny >= 0 && ny < n && !visit[nx][ny]) {if (heightMap[nx][ny] < cur.first) {res += cur.first - heightMap[nx][ny];}visit[nx][ny] = true;pq.push({max(heightMap[nx][ny], cur.first), nx * n + ny});}}}return res;}
};

【Java】

class Solution {private int[] dirs = {-1, 0, 1, 0, -1};public int trapRainWater(int[][] heightMap) {if (heightMap == null || heightMap.length < 3 || heightMap[0].length < 3) {return 0;}int m = heightMap.length, n = heightMap[0].length, res = 0;PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);boolean[][] visit = new boolean[m][n];for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {pq.offer(new int[]{heightMap[i][j], i * n + j});visit[i][j] = true;}}}while (!pq.isEmpty()) {int[] cur = pq.poll();for (int k = 0; k < 4; ++k) {int nx = cur[1] / n + dirs[k], ny = cur[1] % n + dirs[k + 1];if (nx >= 0 && nx < m && ny >= 0 && ny < n && !visit[nx][ny]) {if (heightMap[nx][ny] < cur[0]) {res += cur[0] - heightMap[nx][ny];}visit[nx][ny] = true;pq.offer(new int[]{Math.max(heightMap[nx][ny], cur[0]), nx * n + ny});}}}return res;}
}

相关文章:

Leetcode-407. Trapping Rain Water II [C++][Java]

目录 一、题目描述 二、解题思路 【C】 【Java】 Leetcode-407. Trapping Rain Water IIhttps://leetcode.com/problems/trapping-rain-water-ii/description/ 一、题目描述 Given an m x n integer matrix heightMap representing the height of each unit cell in a 2D…...

详解 torch.triu:上三角矩阵的高效构造(中英双语)

详解 torch.triu&#xff1a;上三角矩阵的高效构造 在深度学习和矩阵运算中&#xff0c;我们经常需要构造上三角矩阵&#xff08;Upper Triangular Matrix&#xff09;&#xff0c;其中主对角线以下的元素全部设为 0。PyTorch 提供了一个高效的函数 torch.triu()&#xff0c;用…...

[ TypeScript ] “undefined extends xxx“ 总是为 true 的 bug

版本号 "typescript": "^5.7.3", "unplugin": "^2.2.0",说明 在使用 unplugin 时 , 我定义插件的参数是 必填的, 使用时却是一个可空参数, 不传参也不会报错, (options?: UserOptions) > Return &#x1f632;&#x1f632;&…...

高清下载油管视频到本地

下载工具并安装: yt-dlp官网地址&#xff1a; GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader ffmpeg官网地址&#xff1a; Download FFmpeg 注&#xff1a;记住为其添加环境变量 操作命令&#xff1a; 该指令表示以720p码率下载VIDEO_UR…...

Hadoop常用操作命令

在NameNode节点格式化集群 初始化集群 hdfs namenode -format启动HDFS sbin/start-dfs.sh启动yarn sbin/start-yarn.sh启动NodeManager yarn-daemon.sh start nodemanager启动DataNode hadoop-daemon.sh start datanode启动SecondaryNameNode hadoop-daemon.sh start se…...

[HOT 100] 2439. 最小化数组中的最大值

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 2439. 最小化数组中的最大值 - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 给你一个下标从 0 开始的数组 nums &#xff0c;它含有 n 个非负整数。 每一步操作中&#…...

【JavaEE进阶】图书管理系统 - 贰

目录 &#x1f332;前言 &#x1f384;设计数据库 &#x1f343;引⼊MyBatis和MySQL驱动依赖 &#x1f333;Model创建 &#x1f38d;约定前后端交互接口 &#x1f340;服务器代码 &#x1f6a9;控制层 &#x1f6a9;业务层 &#x1f6a9;数据层 &#x1f334;前端代码…...

Vue学习教程-14内置指令

文章目录 前言一、v-text指令二、v-html指令三、v-cloak指令四、v-once指令五、v-pre指令六、其他指令 前言 Vue.js 提供了许多内置指令&#xff08;Directives&#xff09;&#xff0c;这些指令用于在模板中添加特殊功能。内置指令以 v- 前缀开始。 v-text : 更新元素的 tex…...

【蓝桥杯单片机】客观题

一、第十三届省赛&#xff08;一&#xff09; 二、第十三届省赛&#xff08;二&#xff09;...

C++ 设计模式-访问者模式

C++访问者模式 一、模式痛点:当if-else成为维护噩梦 开发动物园管理系统,最初的需求很简单: class Animal {}; class Cat : public Animal {}; class Dog : public Animal {};// 处理动物叫声 void makeSound(Animal* a) {if (auto c = dynamic_cast<Cat*>(a)) {st…...

靶场之路-Kioptix Level-1 mod_ssl 缓冲区溢出漏洞

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章笔记的只是方便各位师傅学习知识,以下网站涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一、准备工作 首先使用 vmware 导入靶机文件&#xff0c; 然后网络模式改成 nat 模式即可 我们打…...

【Viewer.js】vue3封装图片查看器

效果图 需求 点击图片放大可关闭放大的 图片 下载 cnpm in viewerjs状态管理方法 stores/imgSeeStore.js import { defineStore } from pinia export const imgSeeStore defineStore(imgSeeStore, {state: () > ({showImgSee: false,ImgUrl: ,}),getters: {},actions: {…...

stm32mp采用spi接口扩展can

在 STM32MP 系列微处理器中,通过 SPI 转 CAN 功能扩展 CAN 接口需要结合硬件设计(如使用 SPI 接口的 CAN 控制器芯片)和 Linux 驱动配置。以下是详细的实现步骤和关键点: 硬件选型与连接 常用 SPI 转 CAN 芯片MCP2515:经典 SPI 转 CAN 控制器,支持 CAN 2.0B。MCP2517FD:…...

forge-1.21.x模组开发(二)给物品添加功能

功能效果 创建一个兑换券&#xff0c;当使用兑换券对着兑换机右键时&#xff0c;获得一条烤鱼 创建兑换券 创建ExchangeCouponsItem.java&#xff0c;继承Item&#xff0c;定义兑换券内容 public class ExchangeCouponsItem extends Item {public ExchangeCouponsItem(Prop…...

创建第一个 Maven 项目(一)

一、引言 在 Java 开发的广袤天地中&#xff0c;Maven 宛如一位全能的管家&#xff0c;发挥着举足轻重的作用。它是一个基于项目对象模型&#xff08;POM&#xff09;的项目管理和构建自动化工具&#xff0c;极大地简化了 Java 项目的开发流程。 Maven 的核心优势之一在于其强…...

网络运维学习笔记 022 HCIA-Datacom新增知识点03园区网典型组网架构及案例实战

园区网典型组网架构及案例实战 园区网&#xff1a;内部运行了园区网协议的一个主体网络 园区网络典型架构 园区网络常用协议与技术&#xff1a; 接入层&#xff1a; VLAN、生成树、链路聚合、AAA、dhcp-snooping等 汇聚层&#xff1a;DHCP、堆叠、链路聚合、生成树、OSPF、静…...

python-leetcode-二叉树的直径

543. 二叉树的直径 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solutio…...

ubuntu中打包与压缩命令详解

Ubuntu 中打包与压缩命令详解 在 Ubuntu 系统中&#xff0c;打包和压缩文件是常见的操作。通过打包和压缩&#xff0c;可以将多个文件或目录合并为一个文件&#xff0c;并减小文件大小以节省存储空间或方便传输。本文将详细介绍 Ubuntu 中常用的打包与压缩命令及其用法。 目录…...

Linux MySQL 8.0.29 忽略表名大小写配置

Linux MySQL 8.0.29 忽略表名大小写配置 问题背景解决方案遇到的问题&#xff1a; 问题背景 突然发现有个大写的表报不存在。 在Windows上&#xff0c;MySQL是默认支持忽略大小写的。 这个时候你要查询一下是不是没有配置&#xff1a; SHOW VARIABLES LIKE lower_case_table…...

【c++】【线程池】线程池模式

【c】【线程池】线程池模式 1 L/F领导者与跟随者模式 概述&#xff1a;在此模式中&#xff0c;线程池中的线程分为&#xff1a;领导者&#xff08;Leader&#xff09;&#xff0c;跟随者&#xff08;Follower&#xff09;和工作者&#xff08;Processor&#xff09; 领导者线…...

别再为Aspose水印发愁了!手把手教你用15.8.0旧版jar+license.xml搞定Word转PDF

企业级文档处理实战&#xff1a;Aspose.Words无水印转换方案深度解析 在中小型企业的技术栈中&#xff0c;文档处理往往是最容易被忽视却又频繁引发问题的环节。当市场部门急着要生成上百份客户报告&#xff0c;当财务系统需要自动导出合规的PDF账单&#xff0c;或是当HR系统要…...

Spring Boot项目里MySQL连接突然断开的排查与修复(附HikariCP配置)

Spring Boot项目中MySQL连接断开的深度排查与HikariCP优化实战 凌晨三点&#xff0c;监控系统突然发出刺耳的警报声——你的Spring Boot应用在夜间低峰期出现了大量"Communications link failure"错误。这不是第一次了&#xff0c;每次都是夜深人静时发生&#xff0c…...

给嵌入式新人的保姆级指南:从零搞定MaixBit开发板(含驱动、固件、IDE完整配置流程)

给嵌入式新人的保姆级指南&#xff1a;从零搞定MaixBit开发板&#xff08;含驱动、固件、IDE完整配置流程&#xff09; 第一次拿到MaixBit开发板时&#xff0c;那种兴奋和忐忑交织的感觉我至今记忆犹新。这块小小的板子就像一扇通往智能硬件世界的大门&#xff0c;但驱动安装、…...

从Qt信号槽的5种连接方式,聊聊Qt::QueuedConnection的设计哲学与适用场景

Qt信号槽的5种连接方式深度解析&#xff1a;从设计哲学到实战选择 在Qt框架中&#xff0c;信号与槽机制是其最引以为傲的核心特性之一。这种优雅的事件处理方式不仅简化了对象间的通信&#xff0c;更为多线程编程提供了安全可靠的解决方案。但你是否真正理解信号槽背后五种连接…...

别再死记硬背论文了!用Python+Transformer复现医学报告生成SOTA模型(附代码)

用PythonTransformer实战医学报告生成&#xff1a;从论文到SOTA模型的完整复现指南 当你在PubMed或arXiv上读到那些指标惊艳的医学报告生成论文时&#xff0c;是否曾被复杂的模型架构图劝退&#xff1f;本文将以第三篇论文《Radiology Report Generation with General and Spec…...

别再死记硬背了!用这5个真实案例,彻底搞懂Yocto BitBake的变量赋值语法(.bb文件)

别再死记硬背了&#xff01;用这5个真实案例&#xff0c;彻底搞懂Yocto BitBake的变量赋值语法&#xff08;.bb文件&#xff09; 第一次打开Yocto项目的.bb文件时&#xff0c;那些看似简单的等号、问号和冒号组合&#xff0c;往往让人一头雾水。为什么有的变量赋值会神奇地改变…...

5大核心功能深度解析:League Akari如何重塑你的英雄联盟游戏体验

5大核心功能深度解析&#xff1a;League Akari如何重塑你的英雄联盟游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾经因为短…...

ShowHiddenChannels插件:3分钟解锁Discord隐藏频道查看权限的终极指南

ShowHiddenChannels插件&#xff1a;3分钟解锁Discord隐藏频道查看权限的终极指南 【免费下载链接】return-ShowHiddenChannels A BetterDiscord plugin which displays all hidden channels and allows users to view information about them. 项目地址: https://gitcode.co…...

别再用Docker镜像打包Dify客户端了!C# 14原生AOT单文件部署正在重构云原生交付范式(限时开放压测数据集)

第一章&#xff1a;Dify客户端云原生交付范式的演进与重构动因在AI应用规模化落地的背景下&#xff0c;Dify客户端从单体打包部署逐步转向以Kubernetes为核心的云原生交付体系。这一转变并非单纯的技术升级&#xff0c;而是应对多租户隔离、边缘协同推理、热插拔插件治理及跨云…...

保姆级教程:在RK3588 EVB开发板上手把手配置4屏拼接(附HwComposerEnv.xml详解)

RK3588开发板4屏拼接实战&#xff1a;从硬件连接到HwComposerEnv.xml全解析 第一次拿到RK3588开发板时&#xff0c;最让我兴奋的就是它强大的多屏输出能力。想象一下&#xff0c;用一块小小的开发板同时驱动四个显示器&#xff0c;构建一个沉浸式的数字看板或者多任务工作环境&…...