news 2026/5/16 1:19:50

LeetCode 1266.访问所有点的最小时间:贪心(数学)+python一行版

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 1266.访问所有点的最小时间:贪心(数学)+python一行版

【LetMeFly】1266.访问所有点的最小时间:贪心(数学)+python一行版

力扣题目链接:https://leetcode.cn/problems/minimum-time-visiting-all-points/

平面上有n个点,点的位置用整数坐标表示points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。

你需要按照下面的规则在平面上移动:

  • 每一秒内,你可以:
    • 沿水平方向移动一个单位长度,或者
    • 沿竖直方向移动一个单位长度,或者
    • 跨过对角线移动sqrt(2)个单位长度(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。
  • 必须按照数组中出现的顺序来访问这些点。
  • 在访问某个点时,可以经过该点后面出现的点,但经过的那些点不算作有效访问。

示例 1:

输入:points = [[1,1],[3,4],[-1,0]]输出:7解释:一条最佳的访问路径是:[1,1]-> [2,2] -> [3,3] ->[3,4]-> [2,3] -> [1,2] -> [0,1] ->[-1,0]从 [1,1] 到 [3,4] 需要 3 秒 从 [3,4] 到 [-1,0] 需要 4 秒 一共需要 7 秒

示例 2:

输入:points = [[3,2],[-2,2]]输出:5

提示:

  • points.length == n
  • 1 <= n <= 100
  • points[i].length == 2
  • -1000 <= points[i][0], points[i][1] <= 1000

解题方法:贪心

斜着移动一次相当于横着移动一次加竖着移动一次,点的访问顺序是固定的,所以从a点到b点时:

我们尽可能多地斜向移动,移动到一条水平线或竖直线时水平/竖直移动。

总移动次数:m a x ( 水平 d i f f , 竖直 d i f f ) max(水平diff, 竖直diff)max(水平diff,竖直diff)。相当于斜向移动时候把近的那个水平/竖直分量给一块走了。

  • 时间复杂度O ( l e n ( p i n t s ) ) O(len(pints))O(len(pints))
  • 空间复杂度O ( 1 ) O(1)O(1)

AC代码

C++
/* * @LastEditTime: 2026-01-12 23:28:12 */classSolution{public:intminTimeToVisitAllPoints(vector<vector<int>>&points){intans=0;for(inti=1;i<points.size();i++){ans+=max(abs(points[i][0]-points[i-1][0]),abs(points[i][1]-points[i-1][1]));}returnans;}};
Python
''' LastEditTime: 2026-01-12 23:32:26 '''fromtypingimportListfromitertoolsimportpairwiseclassSolution:defminTimeToVisitAllPoints(self,points:List[List[int]])->int:returnsum(max(abs(a[0]-b[0]),abs(a[1]-b[1]))fora,binpairwise(points))
Java
/* * @LastEditTime: 2026-01-12 23:32:59 */classSolution{publicintminTimeToVisitAllPoints(int[][]points){intans=0;for(inti=1;i<points.length;i++){ans+=Math.max(Math.abs(points[i][0]-points[i-1][0]),Math.abs(points[i][1]-points[i-1][1]));}returnans;}}
Go
/* * @LastEditTime: 2026-01-12 23:35:23 */packagemainfuncabs1266(aint)int{ifa<0{return-a}returna}funcminTimeToVisitAllPoints(points[][]int)(ansint){fori:=1;i<len(points);i++{ans+=max(abs1266(points[i][0]-points[i-1][0]),abs1266(points[i][1]-points[i-1][1]))}return}
Rust
/* * @LastEditTime: 2026-01-12 23:37:10 */implSolution{pubfnmin_time_to_visit_all_points(points:Vec<Vec<i32>>)->i32{letmutans:i32=0;foriin1..points.len(){ans+=(points[i][0]-points[i-1][0]).abs().max((points[i][1]-points[i-1][1]).abs());}ans}}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 0:04:18

I2S协议PCB布线关键点:零基础掌握走线规则

I2S协议PCB布线实战指南&#xff1a;从零开始避开90%工程师踩过的坑你有没有遇到过这样的情况&#xff1f;系统明明逻辑跑通了&#xff0c;代码也没问题&#xff0c;可一播放音频就“咔哒”作响&#xff0c;或者高音发毛、底噪明显。示波器一测&#xff0c;时钟波形歪歪扭扭&am…

作者头像 李华
网站建设 2026/5/14 7:26:43

Altium Designer工业EMC设计核心要点

从源头扼杀干扰&#xff1a;Altium Designer工业级EMC实战指南 你有没有遇到过这样的场景&#xff1f; PCB板子焊好了&#xff0c;功能一切正常——可一进电波暗室&#xff0c;辐射发射在30MHz到200MHz之间“爆表”&#xff0c;超标十几dB&#xff1b;或者现场运行时&#xff…

作者头像 李华
网站建设 2026/5/9 22:56:02

视觉与惯导融合定位技术:自动驾驶手把手教程

视觉与惯导融合定位&#xff1a;自动驾驶的“内在感知”是如何炼成的&#xff1f;在一辆真正能自主行驶的汽车里&#xff0c;最核心的问题不是“怎么开”&#xff0c;而是——“我现在在哪&#xff1f;”这听起来简单&#xff0c;但对自动驾驶系统而言&#xff0c;精准、连续且…

作者头像 李华
网站建设 2026/5/10 9:11:40

数字孪生在智能工厂中的应用:实战案例解析

数字孪生在智能工厂中的实战落地&#xff1a;从数据感知到闭环优化 当产线“生病”&#xff0c;如何在它停机前就开出处方&#xff1f; 在一家新能源汽车电池PACK工厂里&#xff0c;曾经发生过这样一幕&#xff1a;某条关键装配线突然停摆&#xff0c;维修团队花了整整42分钟才…

作者头像 李华
网站建设 2026/5/9 10:42:53

[特殊字符]_微服务架构下的性能调优实战[20260112163019]

作为一名经历过多个微服务架构项目的工程师&#xff0c;我深知在分布式环境下进行性能调优的复杂性。微服务架构虽然提供了良好的可扩展性和灵活性&#xff0c;但也带来了新的性能挑战。今天我要分享的是在微服务架构下进行性能调优的实战经验。 &#x1f4a1; 微服务架构的性…

作者头像 李华
网站建设 2026/5/13 12:39:11

I2C时序噪声干扰识别:一文说清信号完整性诊断方法

I2C时序噪声干扰识别&#xff1a;从波形到实战的信号完整性诊断全解析你有没有遇到过这样的场景&#xff1f;系统明明设计得“天衣无缝”&#xff0c;可I2C通信就是时不时丢包、报错&#xff0c;甚至整个传感器网络突然“失联”。重启&#xff1f;有时管用&#xff1b;换线&…

作者头像 李华