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

【Leetcode 每日一题 - 扩展】3342. 到达最后一个房间的最少时间 II

问题背景

有一个地窖,地窖中有 n × m n \times m n×m 个房间,它们呈网格状排布。
给你一个大小为 n × m n \times m n×m 的二维数组 m o v e T i m e moveTime moveTime,其中 m o v e T i m e [ i ] [ j ] moveTime[i][j] moveTime[i][j] 表示在这个时刻 以后 你才可以 开始 往这个房间 移动 。你在时刻 t = 0 t = 0 t=0 时从房间 ( 0 , 0 ) (0, 0) (0,0) 出发,每次可以移动到 相邻 的一个房间。在 相邻 房间之间移动需要的时间为:第一次花费 1 1 1 秒,第二次花费 2 2 2 秒,第三次花费 1 1 1 秒,第四次花费 2 2 2 秒……如此 往复
请你返回到达房间 ( n − 1 , m − 1 ) (n - 1, m - 1) (n1,m1) 所需要的 最少 时间。
如果两个房间有一条公共边(可以是水平的也可以是竖直的),那么我们称这两个房间是 相邻 的。

数据约束

  • 2 ≤ n = m o v e T i m e . l e n g t h ≤ 750 2 \le n = moveTime.length \le 750 2n=moveTime.length750
  • 2 ≤ m = m o v e T i m e [ i ] . l e n g t h ≤ 750 2 \le m = moveTime[i].length \le 750 2m=moveTime[i].length750
  • 0 ≤ m o v e T i m e [ i ] [ j ] ≤ 1 0 9 0 \le moveTime[i][j] \le 10 ^ 9 0moveTime[i][j]109

解题过程

Dijkstra 算法的模板题,需要修改的模板中新距离的计算方式。
另外有必要一提的是,题中要求的时间是出发时间而非到达时间,这是很容易出错的地方。

具体实现

class Solution {private final static int[][] DIRECTIONS = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public int minTimeToReach(int[][] moveTime) {int n = moveTime.length;int m = moveTime[0].length;int[][] dis = new int[n][m];for (int[] row : dis) {Arrays.fill(row, Integer.MAX_VALUE);}dis[0][0] = 0;PriorityQueue<int[]> heap = new PriorityQueue<>((o1, o2) -> o1[0] - o2[0]);heap.add(new int[]{0, 0, 0});while (true) {int[] cur = heap.poll();int d = cur[0], i = cur[1], j = cur[2];if (i == n - 1 && j == m - 1) {return d;}if (d > dis[i][j]) {continue;}int time = (i + j) % 2 + 1;for (int[] direction : DIRECTIONS) {int x = i + direction[0], y = j + direction[1];if (0 <= x && x < n && 0 <= y && y < m) {int newDis = Math.max(d, moveTime[x][y]) + time;if (newDis < dis[x][y]) {dis[x][y] = newDis;heap.add(new int[]{newDis, x, y});}}}}}
}
http://www.xdnf.cn/news/4396.html

相关文章:

  • 什么是 token-level 嵌入
  • JVM局部变量表和操作数栈的内存布局
  • C24-数组
  • MedCLIP-SAMv2 实验计划
  • DevExpressWinForms-AlertControl-使用教程
  • 【计算机视觉】OpenCV项目实战:OpenCV_Position 项目深度解析:基于 OpenCV 的相机定位技术
  • 深入探讨 UDP 协议与多线程 HTTP 服务器
  • python-71-基于pyecharts的通用绘图流程
  • 路由器NAT回流踩坑
  • 边缘计算:开启智能新时代的“秘密武器”
  • 性能比拼: HTTP/2 vs. HTTP/3
  • 基于大模型的输卵管妊娠全流程预测与治疗方案研究报告
  • MCP连接Agent:AI时代的TCP/IP
  • 新能源汽车中的NVM计时与RTC计时:区别与应用详解
  • XSS 攻击:深入剖析“暗藏在网页中的脚本“与防御之道
  • 怎么在非 hadoop 用户下启动 hadoop
  • PBR材质-Unity/Blender/UE
  • hadoop的运行模式
  • Web前端技术栈:从入门到进阶都需要学什么内容
  • 【Prompt工程—文生图】案例大全
  • c# LINQ-Query01
  • C 语言编码规范
  • Ubuntu也开始锈化了?Ubuntu 计划在 25.10 版本开始引入 Rust Coreutils
  • 鸿蒙开发——1.ArkTS声明式开发(UI范式基本语法)
  • kotlin一个函数返回多个值
  • 线性代数之矩阵运算:驱动深度学习模型进化的数学引擎
  • 数据可视化与数据编辑器:直观呈现数据价值
  • 在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录
  • SAP如何反查增强点的位置呢?怎么判断这个报错是增强,还是标准信息呢?
  • Postman最佳平替, API测试工具Bruno实用教程(一):基础篇