资讯动态

LeetCode-Go 题解 1266. Minimum Time Visiting All Points:对角线移动下的逐点最短访问时间

发布时间:2026/9/13 4:41:13 来源:尧图企业网站定制
LeetCode-Go 题解 1266. Minimum Time Visiting All Points对角线移动下的逐点最短访问时间【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go导读本篇以 leetcode/1266.Minimum-Time-Visiting-All-Points/README.md 为主体结合 LeetCode-Go 仓库中该题的真实实现与测试用例讲解如何求解按给定顺序访问平面上所有点的最短时间。读完本文你将掌握该题的数学本质切比雪夫距离、一次遍历的 O(n) 解法、Go 语言的落地实现以及仓库中对应的源码与测试组织方式。题目回顾一秒内能怎么动平面上有n个点第i个点用整数坐标points[i] [xi, yi]表示。需要找出按数组中出现的顺序访问所有点所需的最短时间以秒为单位。移动规则只有两条每一秒可以沿水平或竖直方向移动 1 个单位也可以沿对角线移动对角线移动等价于在同一秒内沿水平方向和竖直方向各移动 1 个单位必须严格按照数组中的顺序访问这些点即从points[0]依次走到points[1]、points[2]…… 直到最后一个点。题目约束如下与 README 中的 Constraints 一致points.length n1 n 100points[i].length 2-1000 points[i][0], points[i][1] 1000由于坐标均为整数、范围仅到 ±1000所有中间计算都不会溢出使用int类型即可安全完成。示例推导7 秒和 5 秒是怎么来的示例 1Input: points [[1,1],[3,4],[-1,0]] Output: 7题目给出的一条最优路径为[1,1] - [2,2] - [3,3] - [3,4] - [2,3] - [1,2] - [0,1] - [-1,0]从[1,1]到[3,4]耗时 3 秒先沿对角线走到[3,3]再竖直移动 1 单位到[3,4]从[3,4]到[-1,0]耗时 4 秒水平方向要移动 4 个单位3 → -1竖直方向要移动 4 个单位4 → 0二者相等恰好可以全程走对角线因此耗时 4 秒总时间 3 4 7 秒。示例 2Input: points [[3,2],[-2,2]] Output: 5从[3,2]到[-2,2]水平位移|3 - (-2)| 5竖直位移|2 - 2| 0由于竖直方向没有位移只能沿水平方向走耗时 5 秒。数学本质相邻两点的耗时 max(|dx|, |dy|)关键洞察在于每秒可以同时对 x 轴和 y 轴各移动 1 个单位对角线移动。因此从点 A 到点 B水平方向需要|dx|秒竖直方向需要|dy|秒而每秒可以同时推进两个方向所以总耗时由较大的那个位移决定time(A, B) max(|xA - xB|, |yA - yB|)这正是数学中的切比雪夫距离Chebyshev distance。当|dx| |dy|时多余的差值只能靠水平直线移动补足反之亦然二者相等时则全程走对角线。由于必须按顺序访问每一段相邻点之间的最短耗时互相独立答案就是对所有相邻点对的耗时求和totalTime Σ max(|xi - xi-1|, |yi - yi-1|) (i 1, 2, ..., n-1)这也是 README 的解题思路中分别计算 x 轴和 y 轴上的差值取最大值即是这两点之间飞行的最短时间的数学解释——原文档用飞机飞行做类比对角线移动正相当于飞机斜向飞行。边界情况只有一个点时当n 1时不存在任何相邻点对不需要移动答案应为 0。下面的实现中for循环从i 1开始、i len(points)结束n 1时循环体一次都不会执行res保持初始值 0天然正确无需额外特判。Go 实现仓库源码逐行解析仓库中的实际实现位于 1266. Minimum Time Visiting All Points.go与 README 给出的代码完全一致package leetcode func minTimeToVisitAllPoints(points [][]int) int { res : 0 for i : 1; i len(points); i { res max(abs(points[i][0]-points[i-1][0]), abs(points[i][1]-points[i-1][1])) } return res } func max(a int, b int) int { if a b { return a } return b } func abs(a int) int { if a 0 { return a } return -a }代码走读res累加器初始化为 0从第 2 个点下标 1开始逐个与前一个点比较保证严格按数组顺序访问对每一对相邻点分别用abs求出 x 轴与 y 轴的位移再用max取较大者作为该段耗时并累加循环结束后res即为总最短时间。从源码结构看max与abs两个辅助函数与主函数定义在同一个文件内第 1123 行使得解法文件自包含、不依赖额外工具函数可以直接编译运行。复杂度分析时间复杂度O(n)。只需一次线性遍历对n - 1对相邻点各做常数次算术与比较运算空间复杂度O(1)。只使用了一个累加变量res没有申请任何与输入规模相关的额外空间。对于n 100的约束而言该解法在时间和空间上都远优于题目要求。测试与验证仓库如何保证正确性仓库为本题提供了专门的测试文件 1266. Minimum Time Visiting All Points_test.go测试组织方式如下定义了question1266结构体内嵌para1266输入参数points与ans1266期望答案one将用例参数与期望结果成对组织覆盖了题目给出的两个标准用例[[1,1],[3,4],[-1,0]]期望输出7[[3,2],[-2,2]]期望输出5Test_Problem1266遍历全部用例调用minTimeToVisitAllPoints(p.points)并打印输入与输出便于人工核对结果。如需在本仓库中复现测试可以在仓库根目录执行go test ./leetcode/1266.Minimum-Time-Visiting-All-Points/...仓库根目录的 gotest.sh 展示了项目整体的测试与覆盖率收集方式通过go test -covermodeatomic -coverprofilecoverage.txt ./leetcode/...对全部 LeetCode 题解包一次性生成合法的覆盖率报告这也是项目描述中100% test coverage的依据来源。小结LeetCode 1266 的解法核心只有一句话相邻两点耗时等于 x 轴位移与 y 轴位移中的较大者切比雪夫距离按顺序累加即可。它是一道典型的把移动规则翻译成数学距离的入门题同时也能帮助理解切比雪夫距离在实际规划问题如棋盘、网格、无人机路径中的含义。仓库中的 Go 实现以 O(n) 时间、O(1) 空间完成求解代码与测试文件路径固定、组织清晰适合作为学习题解 测试配套写法的参考范例。【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价