问题描述:
示例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] qi
从 [1,1] 到 [3,4] 需要 3 秒
从 [3,4] 到 [-1,0] 需要 4 秒
一共需要 7 秒
示例2:
输入:points = [[3,2],[-2,2]]
输出:5
思路:
切比雪夫距离:
两个点x和y,dx(x和y的x坐标距离差),dy(x和y的y坐标距离差)
如果(dx>dy),那么就将点先移动dy个单位,然后再移动dx-dy的长度,那么移动的距离就是(dy+dx-dy)=dx
同理
如果(dy>dx),那么就将点先移动dx个单位,然后再移动dy-dx的长度,那么移动的距离就是(dx+dy-dx)=dy
如果(dx=dy),那么就将移动的距离就是=dx
所以只需要遍历所有的点,找到两个点中的max(dx,dy),然后将所有的两点最短长度相加起来就是最终移动的最短长度.
java代码:
class Solution {
public int minTimeToVisitAllPoints(int[][] points) {
int count =0;
for(int i=0;i<points.length-1;i++){
int dx=Math.abs(points[i+1][0]-points[i][0]);
int dy=Math.abs(points[i+1][1]-points[i][1]);
count+=Math.max(dx,dy);
}
return count;
}
}