news 2026/4/23 16:54:48

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/4/23 9:47:58

Linux 内核学习(16) --- linux x86-64 虚拟地址空间和区域

目录x86_64 的虚拟地址空间直接映射区和 vmalloc 区域I/O 统一编址与 ioremapalloc_pages 内存x86_64 的虚拟地址空间 直接映射区和 vmalloc 区域 内核虚拟地址空间直接映射区: 直接映射区是内核虚拟地址空间中一段连续的区域&#xff0c;将物理内存按固定偏移&#xff08;通…

作者头像 李华
网站建设 2026/4/23 9:48:27

**知识图谱:发散创新的力量**随着信息

知识图谱&#xff1a;发散创新的力量 随着信息8*一、知识图谱概述** 8*二、知识图谱的构建** 8*三、知识图谱的应用** 8*四、知识图谱的创新潜力** 8*五、知识图谱的具体实现案例** 六、知识图谱的挑战与未来 总结 注&#xff1a;由于篇幅限制&#xff0c;本文仅提供了大致的框…

作者头像 李华
网站建设 2026/4/23 9:48:41

接口测试用例的设计方法

接口测试用例的设计方法1.接口测试思路2.接口测试用例要素模块、测试标题、优先级、前置条件、请求方法、请求参数、预期结果、实际结果3.接口测试用例设计接口主要的组成部分&#xff1a;请求方法、请求参数、URL、响应结果检查数据正确性&#xff1a;不同的参数对应的不同接口…

作者头像 李华
网站建设 2026/4/23 9:47:55

结型场效应晶体管JEFT(一)——原理

两个p区之间的n区是导电沟道&#xff0c;在这个n沟道器件中&#xff0c;多数载流子电子自源极流向漏极&#xff0c;器件的栅极是控制端。由于在n沟道晶体管中&#xff0c;多数载流子电子主要起导电作用&#xff0c;所以JFET是多数载流子导电器件。给栅极施加零偏电压&#xff0…

作者头像 李华
网站建设 2026/4/23 11:13:13

3D数字人规模化商用时代来临:极速响应重新定义人机交互体验

随着人工智能技术的快速发展&#xff0c;3D数字人正从概念走向大规模商业化应用&#xff0c;金融、教育、文旅、零售等行业纷纷部署数字人系统以提升服务效率和用户体验。然而&#xff0c;传统数字人解决方案普遍存在响应延迟高、部署成本高昂等痛点&#xff0c;面对这一难题&a…

作者头像 李华