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

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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

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

相关文章:

  • 快速理解HAL_UART_RxCpltCallback在工业协议解析中的角色
  • 全面讲解Elasticsearch向量类型(dense_vector)用法
  • 软著撰写要点
  • Elasticsearch日志分析系统架构设计全面讲解
  • 基于KRR核岭回归(Kernel Ridge Regression)多变量回归预测 (多输入单输出) Matlab回归
  • Multisim14.2安装教程:防病毒软件冲突解决方法
  • 视觉与惯导融合定位技术:自动驾驶手把手教程
  • W5500以太网模块PCB布局布线操作指南
  • I2C时序噪声干扰识别:一文说清信号完整性诊断方法
  • Linux 内核学习(16) --- linux x86-64 虚拟地址空间和区域
  • 基于Java+SpringBoot+SSM办公管理系统(源码+LW+调试文档+讲解等)/办公系统/管理系统/办公自动化系统/企业办公管理系统/智能办公管理系统/协同办公管理系统
  • 学霸同款2026继续教育AI论文写作软件TOP10:选对工具轻松过关
  • 手把手教你用Keil C51开发继电器控制系统
  • IGBT——原理和分类
  • Hive与Kylin整合:构建企业级OLAP解决方案
  • 【欠驱动AUV】欠驱动自主水下航行器(AUV)的轨迹跟踪和路径跟随算法的不同分析方法进行仿真研究(Matlab代码、Simulink仿真)
  • Altium Designer工业EMC设计核心要点
  • 基于Java+SpringBoot+SSM动漫分享系统(源码+LW+调试文档+讲解等)/动漫交流平台/动漫资源分享/动漫社区系统/动漫分享网站/动漫共享平台
  • 《创业之路》-829-一个组织中,最复杂、最难处理的其实不是技术、不是产品设计和业务流程,其实是“人”本身。
  • 常见的垃圾回收器
  • 015-MD5极志愿
  • I2S协议PCB布线关键点:零基础掌握走线规则
  • 【叶片单元动量理论】分析给定螺旋桨几何形状在不同前进比下恒定转速下的性能研究(Matlab代码实现)
  • JVM中的类加载Minor GC与Full GC
  • 基于Java+SpringBoot+SSM养老院管理系统(源码+LW+调试文档+讲解等)/养老院管理软件/养老院服务平台/养老机构管理系统/老年护理管理系统/养老院信息管理系统/养老服务管理平台
  • 模拟信号在传感器中的应用:小白入门教程
  • 11. Linux 防火墙管理
  • 实测!2026制造业数字人TOP4榜单:谁能真正适配产线刚性需求?
  • 数字孪生在智能工厂中的应用:实战案例解析
  • 016-扣代码:天翼云登录