方法一 个人方法 找规律:
当前的点为current,下一个点为next,x为两点横坐标之间距离,y为两点竖坐标之间距离
1、当两点横坐标相同时,两点距离为y
2、当两点竖坐标相同时,两点距离为x
3、当两点x与y相同时,则两点的连线在直线y=x上,那么两点的距离既是x也是y
4、当y>x时,x可以转换为y的一部分,其实距离就是y,同理x>y,y可以转为x的一部分,距离就是x
比如:从(1,1)点到(3,4)点的距离,其实和(3,1)到(3,4)的距离是一样的。
var minTimeToVisitAllPoints = function(points) {
let time=0
for(let i=0;i<points.length-1;i++){
let current=points[i],next=points[i+1]
let x=Math.abs(next[0]-current[0]),y=Math.abs(next[1]-current[1])
if(current[1]===next[1]){
time+=x
}else if(current[0]===next[0]){
time+=y
}else if(x===y){
time+=x
}else{
if(x<y){
time+=y
}else if(x>y){
time+=x
}
}
}
return time
};
消耗时间和内存情况:
其实可以更加简化:
不用分那么多情况,两点间距离就是x轴距离和y轴距离绝对值更大的那一个:
var minTimeToVisitAllPoints = function (points) {
let result = 0
for (let i = 0; i < points.length - 1; i++) {
let x = Math.abs(points[i + 1][0] - points[i][0])
let y = Math.abs(points[i + 1][1] - points[i][1])
result += Math.max(x, y)
}
return result
};
消耗时间和内存情况: