这是我的leetcode第一题,说实话当时看题没看懂,然后看了看题解,还是没懂,后来又琢磨题的输入输出,思考了会儿才明白题的意思【写到此处面红耳赤】
大致题意:二维数组中的几组数字,其中每组是两个数字(可理解对应了x,y轴),从第一组数字依次变化到最后一组,一共最少需要增减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 import java.lang.*; 2 public class Solution { 3 public static int minTimeToVisitAllPoints(int[][] points) { 4 int num=0; 5 for(int i=0;i<points.length-1;i++){ 6 System.out.println("~~~~~~"+i); 7 int x1=points[i][0]; 8 int y1=points[i][1]; 9 int x2=points[i+1][0]; 10 int y2=points[i+1][1]; 11 System.out.println("x1:"+x1+",y1:"+y1); 12 System.out.println("x2:"+x2+",y2:"+y2); 13 num+=Math.max(Math.abs(points[i][1]-points[i+1][1]),Math.abs(points[i][0]-points[i+1][0])); 14 } 15 return num; 16 } 17 public static void main(String[] args){ 18 int [][]arr=new int[][]{{1,1},{3,4},{-1,0}}; 19 int [][]arr1=new int[][]{{3,2},{-2,2}}; 20 int res=minTimeToVisitAllPoints(arr); 21 System.out.print(res); 22 } 23 }
最终代码:
1 class Solution { 2 public int minTimeToVisitAllPoints(int[][] points) { 3 int num=0; 4 for(int i=0;i<points.length-1;i++){ 5 num+=Math.max(Math.abs(points[i][1]-points[i+1][1]),Math.abs(points[i][0]-points[i+1][0])); 6 } 7 return num; 8 } 9 }
总结:
最终代码在执行用时和内存消耗上都有提升:循环内的打印语句延长了执行用时,循环内变量的声明增加了内存消耗。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-visiting-all-points