当前位置: 首页 > 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.zskr.cn/news/1372881.html

相关文章:

  • 工业AI预测性维护:让设备从“急诊抢救“走向“定期体检“
  • Excel插件推荐——MarketXLS等投资工具评测
  • 好用还专业!2026 降AIGC平台测评:最新工具推荐与对比分析
  • 好用的AI写作辅助软件推荐(2026最新版)
  • 宝藏合集!2026AI论文网站榜单(覆盖 99% 毕业生论文需求)
  • 4.1 PE 系统简介:Windows PE 是什么?桌面支持为什么必须会
  • Windows上安装APK文件的终极指南:告别臃肿模拟器,轻松实现跨平台应用安装
  • java类继承理解
  • Python基础篇:闭包、装饰器wrapper
  • 雷电模拟器安卓7+抓包失败原因与Burp证书配置方案
  • Web安全 - 国密 SSL / TLCP 接入手把手系列
  • 2026年5月郑州轴承专业服务商盘点:河南瓦房店轴承销售有限公司实力解析 - 2026年企业推荐榜
  • DeepSeek LeetCode 2612. 最少翻转操作数 JavaScript实现
  • Qwen模型 LeetCode 2603. 收集树中金币 Python3实现
  • 空基视觉无感定位组网 适配矿井无信号区域人员管控
  • 为什么92%的AI生成BP被秒拒?ChatGPT商业计划书写作的5大合规红线,今天不看明天就踩坑
  • 2026聚氨酯砂浆磨石地坪选购评测深度解析:聚氨酯砂浆彩砂地面、聚氨酯砂浆磨石地面、聚氨酯砂浆自流平、聚氨酯砂浆防静电地坪选择指南 - 优质品牌商家
  • 2025-2026年上海吉日搬场有限公司电话查询:预约前请确认服务范围与收费标准 - 品牌推荐
  • ChatGPT故事力跃迁指南:掌握5类高共鸣叙事结构,3天内写出用户自发转发的爆款文案
  • 2026道依茨柴油机权威服务商推荐指南:德国DEUTZ发动机/道依茨发动机配件/道依茨柴油机升级排放/VOLVO沃尔沃挖机柴油机/选择指南 - 优质品牌商家
  • 上海离婚别乱找律师!和昊云:专办抚养权财产疑难案 - 外贸老黄
  • 全球首份Gemini代码生成「生产就绪度」白皮书(含27项SRE级验收标准+自动化检测脚本开源)
  • 【DeepSeek边缘部署实战指南】:20年架构师亲授5大避坑法则与3步极简上线法
  • 2025-2026年上海吉日搬场有限公司电话查询:预约前请核实服务资质与报价 - 品牌推荐
  • 如何选25-30万家用SUV车型?2026年5月推荐TOP5对比家庭出行性价比高案例特点 - 品牌推荐
  • 量子机器学习模型面临反向工程攻击:原理、威胁与主动防御策略
  • OpenSSL CVE-2022-0778漏洞深度解析与生产级修复指南
  • 2025-2026年重卡充电桩品牌推荐:十大厂家口碑评测港口防腐蚀场景注意事项价格专业 - 品牌推荐
  • 贝叶斯网络中条件独立性的判断 CS188 Note13 学习笔记
  • 2026年第二季度,专业瑜伽理疗课程团队的选择逻辑与核心推荐 - 2026年企业推荐榜