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

DeepSeek LeetCode 2617. 网格图中最少访问的格子数 Java实现

以下是 LeetCode 2617「网格图中最少访问的格子数」的 Java 实现,采用 BFS + TreeSet 优化,保证每个格子只被访问一次,时间复杂度 O(mn log(m+n))。

```java
class Solution {
public int minimumVisitedCells(int[][] grid) {
int m = grid.length, n = grid[0].length;
if (m == 1 && n == 1) return 1;

// 距离数组,-1 表示未访问
int[][] dist = new int[m][n];
for (int i = 0; i < m; i++) Arrays.fill(dist[i], -1);
dist[0][0] = 1;

// 每一行未访问的列索引
TreeSet<Integer>[] rows = new TreeSet[m];
// 每一列未访问的行索引
TreeSet<Integer>[] cols = new TreeSet[n];
for (int i = 0; i < m; i++) rows[i] = new TreeSet<>();
for (int j = 0; j < n; j++) cols[j] = new TreeSet<>();

// 初始化所有格子(除起点外)加入集合
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 && j == 0) continue;
rows[i].add(j);
cols[j].add(i);
}
}

Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[]{0, 0});

while (!queue.isEmpty()) {
int[] cur = queue.poll();
int i = cur[0], j = cur[1];
int steps = dist[i][j];
int maxRight = Math.min(n - 1, j + grid[i][j]);
int maxDown = Math.min(m - 1, i + grid[i][j]);

// 向右移动,遍历行 i 中所有未访问的列 c (j+1 .. maxRight)
Integer c = rows[i].ceiling(j + 1);
while (c != null && c <= maxRight) {
dist[i][c] = steps + 1;
if (i == m - 1 && c == n - 1) return dist[i][c];
queue.offer(new int[]{i, c});
// 从行集合和列集合中删除该格子
rows[i].remove(c);
cols[c].remove(i);
c = rows[i].ceiling(j + 1); // 继续查找下一个
}

// 向下移动,遍历列 j 中所有未访问的行 r (i+1 .. maxDown)
Integer r = cols[j].ceiling(i + 1);
while (r != null && r <= maxDown) {
dist[r][j] = steps + 1;
if (r == m - 1 && j == n - 1) return dist[r][j];
queue.offer(new int[]{r, j});
cols[j].remove(r);
rows[r].remove(j);
r = cols[j].ceiling(i + 1);
}
}

return dist[m - 1][n - 1];
}
}
```

思路要点

1. BFS 层次遍历
每次移动代价为 1(访问一个新格子),BFS 能保证首次到达终点时步数最少。
2. TreeSet 优化查找
· rows[i] 存储第 i 行尚未访问的列索引。
· cols[j] 存储第 j 列尚未访问的行索引。
· 当从 (i, j) 向右最多走 grid[i][j] 步时,只需从 rows[i] 中查找区间 (j, j+grid[i][j]] 内的所有列,每个格子只被处理一次,避免 O(n) 遍历。
3. 删除已访问格子
当一个格子被访问后,立即从 rows 和 cols 中删除,确保以后不再重复考虑。
4. 提前返回
一旦到达 (m-1, n-1) 立即返回步数,无需继续 BFS。

复杂度分析

· 时间复杂度:O(mn log(m+n))。每个格子最多入队一次,每次从 TreeSet 中查找和删除的操作均为 O(log n)(行)或 O(log m)(列)。
· 空间复杂度:O(mn)。存储距离数组、行/列 TreeSet 以及 BFS 队列。

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

相关文章:

  • ChatGPT+B站策划=降维打击?不,92%创作者正在错误使用——来自217个失败案例的反模式图谱(含3个致命Prompt陷阱)
  • 上位机知识篇---部署过程小知识点(1)
  • LangGraph 状态存储优化:处理大规模多智能体数据的高效方案
  • Python基础篇:闭包、装饰器wrapper
  • DeepSeek LeetCode 2617. 网格图中最少访问的格子数 TypeScript实现
  • 上位机使用篇---Jetson的烧写和备份
  • java类继承理解
  • 全球首份Gemini代码生成「生产就绪度」白皮书(含27项SRE级验收标准+自动化检测脚本开源)
  • 黑白电视的“单眼魔法“:揭秘那个只用亮度讲故事的奇妙世界
  • 贝叶斯网络基本概念 CS188 Note12 学习笔记
  • 矩阵补全因果推断:破解贸易政策评估中的内生性与异质性难题
  • 亮度与色度:揭秘视觉世界的“双重密码“
  • DeepSeek-R1在火山引擎部署的7大避坑指南:从环境配置到GPU显存优化,一线工程师亲授
  • 2025-2026年国内人力资源外包公司推荐:TOP5评测价格注意事项适用场景案例 - 品牌推荐
  • 深度学习篇---张量
  • 贝叶斯网络中条件独立性的判断 CS188 Note13 学习笔记
  • 哪家工程信息平台专业?2026年5月推荐TOP5评测数据覆盖广防漏单特点选择指南 - 品牌推荐
  • 2026年5月郑州轴承专业服务商盘点:河南瓦房店轴承销售有限公司实力解析 - 2026年企业推荐榜
  • 2026果蔬加工去皮设备推荐榜:智能净菜加工设备/智能去皮机/果蔬切片机/果蔬削皮机/果蔬加工生产线/果蔬去皮机/选择指南 - 优质品牌商家
  • 深度学习篇---NVIDIA TensorRT
  • 国防军工涉密网络全光网设备定制化推荐:电话光端机/管理型光纤收发器/综合多业务光端机/视频光端机/视频综合业务光端机/选择指南 - 优质品牌商家
  • 如何在3分钟内精准定位Windows热键冲突:Hotkey Detective终极指南
  • VideoSrt终极指南:3步实现视频自动字幕生成,告别手动打轴烦恼
  • 2026年5月智慧餐厅管理系统口碑之选:陕西创慧信息科技有限公司实战解析 - 2026年企业推荐榜
  • SketchUp STL插件:5分钟快速掌握3D打印模型转换的完整免费指南
  • 北京游学机构哪家好?求推荐孩子独立研学北京,安全有保障的机构 - 品牌2025
  • Windows和Office一键激活终极指南:KMS_VL_ALL_AIO智能脚本完全解析
  • 如何用TestDisk和PhotoRec拯救丢失数据:3分钟快速诊断与完整恢复指南
  • 2025-2026年上海吉日搬场有限公司电话查询:预约前请确认服务范围与收费标准 - 品牌推荐
  • 2026聚氨酯砂浆磨石地坪选购评测深度解析:聚氨酯砂浆彩砂地面、聚氨酯砂浆磨石地面、聚氨酯砂浆自流平、聚氨酯砂浆防静电地坪选择指南 - 优质品牌商家