元宝    LeetCode 675. Cut Off Trees for Golf Event Java Implement

Approach: Sort by Height + BFS Between Consecutive Trees

The rules force a fixed order: you must cut trees from shortest to tallest. So the problem decomposes into independent legs — move from the current position to the next-required tree by the shortest path, pay that distance, repeat. Shortest path on an unweighted grid with obstacles = BFS. If any leg is unreachable (some tree walled off by
"0"s), the answer is
“-1”.

class Solution {
private static final int[][] DIRS = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};

public int cutOffTree(List<List<Integer>> forest) { if (forest == null || forest.isEmpty() || forest.get(0).isEmpty()) return -1; int m = forest.size(), n = forest.get(0).size(); // Collect every tree (height > 1), then cut them in ascending height order. List<int[]> trees = new ArrayList<>(); for (int r = 0; r < m; r++) { for (int c = 0; c < n; c++) { int h = forest.get(r).get(c); if (h > 1) trees.add(new int[]{h, r, c}); } } trees.sort((a, b) -> Integer.compare(a[0], b[0])); int total = 0, row = 0, col = 0; for (int[] t : trees) { int d = bfs(forest, row, col, t[1], t[2]); if (d == -1) return -1; // next tree is unreachable total += d; row = t[1]; col = t[2]; } return total; } /** Shortest step count from (sr,sc) to (tr,tc); -1 if unreachable. */ private int bfs(List<List<Integer>> forest, int sr, int sc, int tr, int tc) { if (sr == tr && sc == tc) return 0; int m = forest.size(), n = forest.get(0).size(); boolean[][] seen = new boolean[m][n]; Queue<int[]> q = new ArrayDeque<>(); q.offer(new int[]{sr, sc, 0}); seen[sr][sc] = true; while (!q.isEmpty()) { int[] cur = q.poll(); for (int[] d : DIRS) { int nr = cur[0] + d[0], nc = cur[1] + d[1]; // height 0 means blocked; everything > 0 is walkable ground if (nr < 0 || nr >= m || nc < 0 || nc >= n) continue; if (seen[nr][nc] || forest.get(nr).get(nc) == 0) continue; if (nr == tr && nc == tc) return cur[2] + 1; // early exit on hit seen[nr][nc] = true; q.offer(new int[]{nr, nc, cur[2] + 1}); } } return -1; }

}

Key details

  • Height
    “1” is walkable ground, not a tree. Only
    “> 1” goes into the
    “trees” list — this is the most common off-by-one-class bug here.

“sr == tr && sc == tc” short-circuit returns
“0”, so a tree standing on your current cell costs nothing.

  • Early return inside BFS the moment the target is dequeued’s neighbor — no need to drain the queue.

“seen” is set when enqueuing, not when dequeuing; otherwise the same cell gets pushed many times.

  • Distance travels inside the queue node (
    “cur[2]”), avoiding a separate
    “dist[][]” allocation per leg.
  • Sorting is by height only; heights are guaranteed distinct in this problem, so no tie-break needed.

Complexity

  • Time: O(T · m · n) for T trees — one full BFS per leg. Plus O(T log T) for the sort.
  • Space: O(m · n) for
    “seen” and the queue, reused per leg.

Verified against the official cases:
“[[1,2,3],[0,0,4],[7,6,5]] → 6”,
“[[1,2,3],[0,0,0],[7,6,5]] → -1”,
“[[2,3,4],[0,0,5],[8,7,6]] → 6”, and the large 4×4 case →
“46”.

相关新闻

YOLOv12结合RFEM感受野增强:遥感小目标检测与上下文融合改进实践

YOLOv12结合RFEM感受野增强:遥感小目标检测与上下文融合改进实践

做遥感目标检测的人可能都有过这种体会&#xff1a;同样一套YOLOv12&#xff0c;在常规目标上跑得好好的&#xff0c;一换到遥感场景&#xff0c;小目标的漏检率立刻上去了。我一开始以为是数据没洗干净&#xff0c;后来反复对比才发现&#xff0c;问题根本不在这——模型的感受…

2026/10/19 16:49:33 阅读更多 →
解锁Claude Extended Thinking:从原理到API配置的实战指南

解锁Claude Extended Thinking:从原理到API配置的实战指南

最近我在搭一套智能文档分析流程时&#xff0c;做了一组对比测试&#xff1a;同一个问题&#xff0c;分别发给普通模式的模型和开启了Extended Thinking的模型。结果有点出乎意料——普通模式不仅解题过程简略&#xff0c;还在中间一步漏掉了关键条件&#xff1b;开了Extended …

2026/10/19 16:49:33 阅读更多 →
网络攻击类型与防御实战:从DDoS到SQL注入的纵深防御指南

网络攻击类型与防御实战:从DDoS到SQL注入的纵深防御指南

网络安全这个话题&#xff0c;聊起来容易走两个极端&#xff1a;要么全是理论模型和安全标准&#xff0c;读得人昏昏欲睡&#xff1b;要么全是攻击演示和工具操作&#xff0c;看完还是一头雾水。干安全运维这些年&#xff0c;我最大的感受是&#xff0c;网络攻击和防御本质上是…

2026/10/19 16:49:33 阅读更多 →

最新新闻

RGAT+GRU融合模型解决APT溯源图稀疏漏报问题

RGAT+GRU融合模型解决APT溯源图稀疏漏报问题

简介&#xff1a;本资源是华中科技大学2023届计算机相关专业&#xff08;如计科、人工智能、网络安全等&#xff09;优秀毕业设计成果&#xff0c;聚焦APT攻击检测这一前沿安全问题&#xff0c;提出并实现了一种基于溯源图建模与RGATGRU融合架构的检测方法优化方案。面向在校本…

2026/10/19 17:38:44 阅读更多 →
文件格式伪装揭秘:从魔数原理到apate工具实战

文件格式伪装揭秘:从魔数原理到apate工具实战

很多人在第一次听说“文件格式伪装”时&#xff0c;第一反应都是&#xff1a;这玩意儿真的能实现吗&#xff1f;改个扩展名谁不会&#xff0c;把.txt改成.exe&#xff0c;文件不照样打不开&#xff1f;如果你也这么想&#xff0c;说明你还没真正理解文件识别的底层逻辑。文件格…

2026/10/19 17:38:44 阅读更多 →
Source Map泄露实战:从检测还原到构建防御的完整指南

Source Map泄露实战:从检测还原到构建防御的完整指南

接手一个站点做安全评估的时候&#xff0c;我习惯先打开开发者工具的 Sources 面板&#xff0c;随手翻一下静态资源目录。很多时候问题就藏在那些不起眼的*.js.map文件里——Webpack 构建后遗留的 Source Map&#xff0c;一旦暴露在生产环境&#xff0c;等于把源码打包好递到别…

2026/10/19 17:38:44 阅读更多 →
MySQL存储过程实战:语法、游标、动态SQL与性能优化全解析

MySQL存储过程实战:语法、游标、动态SQL与性能优化全解析

这年头一说起MySQL存储过程&#xff0c;不少开发者的第一反应就是“能不用就不用”、“业务逻辑别放进数据库”。我早些年也是这个态度&#xff0c;直到接手了几个数据清洗、批量报表、复杂统计类的项目&#xff0c;被接口超时和网络往返折腾得没脾气&#xff0c;才老老实实回头…

2026/10/19 17:38:44 阅读更多 →
Spark性能优化实战:从数据倾斜到资源配置的完整调优指南

Spark性能优化实战:从数据倾斜到资源配置的完整调优指南

1. 为什么 Spark 性能优化是个绕不开的坎干过大数据的人都有一个共识&#xff1a;Spark 作业能跑起来不难&#xff0c;难的是跑得又快又稳。我见过太多团队&#xff0c;集群规模不小&#xff0c;机器配置也不差&#xff0c;但一个 ETL 任务动辄跑两三个小时&#xff0c;资源利用…

2026/10/19 17:38:44 阅读更多 →
open-code-review实战:从零搭建开放可持续的代码审查机制

open-code-review实战:从零搭建开放可持续的代码审查机制

1. 为什么“open-code-review”值得单独拿出来聊第一次听到“open-code-review”这个词&#xff0c;很多人会下意识觉得它只是“代码审查”换了个英文壳子。但真在团队里推过代码审查的人都知道&#xff0c;代码审查这件事&#xff0c;做一次两次不难&#xff0c;难的是把它做成…

2026/10/19 17:37:42 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →