LeetCode刷题(98)~访问所有点的最小时间
【摘要】 题目描述
平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。
你可以按照下面的规则在平面上移动:
每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。必须按照数组中出现的顺序来访问这些点。
示例 1:
输入:po...
题目描述
平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。
你可以按照下面的规则在平面上移动:
- 每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。
- 必须按照数组中出现的顺序来访问这些点。
示例 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 秒
- 1
- 2
- 3
- 4
- 5
- 6
示例 2:
输入:points = [[3,2],[-2,2]]
输出:5
- 1
- 2
- 3
提示:
- points.length == n
- 1 <= n <= 100
- points[i].length == 2
- -1000 <= points[i][0], points[i][1] <= 1000
解答 By 海轰
提交代码
int minTimeToVisitAllPoints(vector<vector<int>>& points) { int count=0; for(int i=0;i<points.size()-1;++i) { int x= points[i][0]<points[i+1][0]? 1:-1; int y= points[i][1]<points[i+1][1]? 1:-1; count+= max((points[i+1][0]-points[i][0])/x,(points[i+1][1]-points[i][1])/y); } return count; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
运行结果
提交代码(优化版)
int minTimeToVisitAllPoints(vector<vector<int>>& points) { int count=0; for(int i=0;i<points.size()-1;++i) { count+= max(abs(points[i+1][0]-points[i][0]),abs(points[i+1][1]-points[i][1])); } return count; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
运行结果
题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-visiting-all-points
文章来源: haihong.blog.csdn.net,作者:海轰Pro,版权归原作者所有,如需转载,请联系作者。
原文链接:haihong.blog.csdn.net/article/details/108223120
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)