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

Qwen模型 LeetCode 2577. 在网格图中访问一个格子的最少时间 Java实现

哎呀,这道题我可太熟啦!2577. 在网格图中访问一个格子的最少时间,听起来就很有挑战性对不对?让我跟你聊聊我的解法思路~

这其实是个典型的最短路径问题呢。想象一下我们站在一个神奇的网格世界里,每个格子都有自己的"解锁时间",就像游戏里的机关一样,只有到了对应的时间才能踩上去。

我最喜欢用Dijkstra算法来解决这种问题啦!我们可以把整个网格看作一张图,每个格子就是一个节点。从起点开始,用优先队列(小根堆)来维护当前能到达的所有位置,每次都选择耗时最少的那个继续探索。

给你写个清爽的Java实现:

```java
import java.util.*;

public class Solution {
public int minimumTime(int[][] grid) {
// 特判:如果起点周围的格子都打不开,那就GG了
if (grid[0][1] > 1 && grid[1][0] > 1) {
return -1;
}

int m = grid.length, n = grid[0].length;
// 记录到达每个位置的最短时间
int[][] dist = new int[m][n];
for (int[] row : dist) {
Arrays.fill(row, Integer.MAX_VALUE);
}

// 方向数组,上下左右
int[][] dirs = {{-1,0}, {1,0}, {0,-1}, {0,1}};

// 优先队列:{time, x, y}
PriorityQueue<int[]> pq = new PriorityQueue<>((a,b) -> a[0] - b[0]);
pq.offer(new int[]{0, 0, 0});
dist[0][0] = 0;

while (!pq.isEmpty()) {
int[] curr = pq.poll();
int time = curr[0], x = curr[1], y = curr[2];

if (x == m-1 && y == n-1) {
return time;
}

for (int[] dir : dirs) {
int nx = x + dir[0], ny = y + dir[1];
if (nx < 0 || nx >= m || ny < 0 || ny >= n) continue;

// 计算到达邻居格子需要的时间
int nextTime;
if (time + 1 >= grid[nx][ny]) {
nextTime = time + 1; // 可以直接走
} else {
// 需要等待,而且要注意奇偶性
int wait = grid[nx][ny] - time;
nextTime = grid[nx][ny] + (wait % 2 == 0 ? 1 : 0);
}

if (nextTime < dist[nx][ny]) {
dist[nx][ny] = nextTime;
pq.offer(new int[]{nextTime, nx, ny});
}
}
}

return -1;
}
}
```

诶,你知道吗?这道题最有趣的地方在于那个等待策略。当我们到达时间比格子解锁时间早的时候,不能简单地等到解锁时间就走,还要考虑奇偶性哦!这就像是在玩节奏游戏,要踩准拍子才行~

我觉得这个题目特别考验对状态转移的理解。你最近是在准备面试吗?要是想练类似的题目,我可以推荐几道经典的最短路径变种题给你哦!要不要来一组"算法副本"挑战?😄

http://www.jsqmd.com/news/874781/

相关文章:

  • SSH known_hosts冲突解决:飞牛NAS重连安全配置指南
  • MLL+KDE:高维数据统计推断的无分箱密度估计方法
  • 统信UOS服务器版初体验:除了装软件,它的包管理、开发工具链和日常运维命令跟CentOS有啥不同?
  • Qwen模型 LeetCode 2581. 统计可能的树根数目 Java实现
  • 8051单片机PDATA与XDATA存储访问优化解析
  • C#实现自动化创建Word可填写表单
  • AI依赖如何引发金融市场系统性风险:从认知退化到同质化共振
  • 高维因果推断:自动双机器学习(ADML)估计器原理与应用
  • 告别TeamViewer!在Ubuntu 22.04上安装向日葵远程控制的保姆级教程(附依赖问题解决)
  • Qwen模型 LeetCode 2584. 分割数组使乘积互质 Java实现
  • 别再死记硬背了!用Python+OpenCV手把手教你理解Anchor机制(附代码可视化)
  • Unity弓箭抛物线弹道实现:手动物理积分与实时预览
  • 差分隐私矩阵机制与FFT优化:保护多轮迭代计算的高效方法
  • C#根据时间加密和防止反编译的两种方案
  • 基于K-means与修正优化的数据压缩表示:为机器学习模型高效瘦身
  • 超效率SBM模型Python实战:用scipy.optimize处理含非期望产出的政府数据效率排名
  • 移动端3D高斯泼溅渲染优化:Lumina系统架构解析
  • 前端国际化进阶:日期时间格式化完全指南
  • 告别第三方工具!Windows 11自带SSH服务保姆级开启与开机自启教程
  • Qwen模型 LeetCode 2577. 在网格图中访问一个格子的最少时间 C语言实现
  • CSS Web安全字体
  • Godot 4地形性能修复:图层混合、LOD切换与法线生成三大断点解决方案
  • 前端国际化:复数规则与文案匹配深度解析
  • 别再死记硬背Sobel算子公式了!用Python+OpenCV手把手带你拆解卷积核的底层逻辑
  • 国内304不锈钢橱柜加工厂专业能力排行盘点:不锈钢钣金加工厂/专业不锈钢橱柜厂家/全屋定制不锈钢橱柜/定做不锈钢橱柜厂家/选择指南 - 优质品牌商家
  • Calico BGP故障诊断:从BIRD未就绪到Established的全链路排查
  • 前端国际化框架对比:i18next vs react-i18next vs Lingui vs Format.js
  • CVE-2024-38819漏洞复现:Tomcat 10.1.22 JNDI注入完整验证指南
  • 嵌入式开发中的字节序解析与C51实现方案
  • 从LightGBM到逻辑回归:手把手教你用category_encoders库搞定5种特征编码