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

【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});}}}}}
}

相关文章:

  • Kubernetes集群生产环境智能伸缩指南
  • 数据分析案例(2)
  • [量化交易Backtrader] - 如何规避过拟合
  • 无网络环境下配置并运行 word2vec复现.py
  • 大模型系列(四)--- GPT2: Language Models are Unsupervised Multitask Learners​
  • 南京市出台工作方案深化“智改数转网联”,物联网集成商从“困局”到“蓝海”!
  • Vue 项目中长按保存图片功能实现指南
  • Unity_JK框架【4】MonoSystem 和 协程工具类 的剖析与实践
  • Czkawka:跨平台重复文件清理
  • 滑动窗口——无重复字符最长的字串
  • 蓝桥杯国赛备赛——字符串
  • Redis持久化存储介质评估:NFS与Ceph的适用性分析
  • 数据中心 第十五次CCF-CSP计算机软件能力认证
  • 护照阅读器简介
  • Spring MVC Controller 方法的返回类型有哪些?
  • Android Car Input HAL
  • MCP学习
  • C++初阶 —— 类和对象
  • 如何使用UGUI的EventTrigger
  • 南京大学OpenHarmony技术俱乐部正式揭牌 仓颉编程语言引领生态创新
  • 为发期刊,高校学者偷贩涉密敏感数据!国安部披露间谍案细节
  • 快评|印巴为何停火?已达成“一场胜利,各自表述”的效果
  • 跨越时空的“精神返乡”,叶灵凤藏书票捐赠上海文学馆
  • 中美经贸高层会谈将在午餐后继续
  • 泰特现代美术馆25年:那些瞬间,让艺术面向所有人
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地