leetcode 1266. Minimum Time Visiting All Points(python)

233 阅读2分钟

这是我参与更文挑战的第12天,活动详情查看: 更文挑战

描述

On a 2D plane, there are n points with integer coordinates points[i] = [xi, yi]. Return the minimum time in seconds to visit all the points in the order given by points.

You can move according to these rules:

In 1 second, you can either:

  • move vertically by one unit,
  • move horizontally by one unit, or
  • move diagonally sqrt(2) units (in other words, move one unit vertically then one unit horizontally in 1 second).

You have to visit the points in the same order as they appear in the array.

You are allowed to pass through points that appear later in the order, but these do not count as visits.

Example 1:

avatar

Input: points = [[1,1],[3,4],[-1,0]]
Output: 7
Explanation: One optimal path is [1,1] -> [2,2] -> [3,3] -> [3,4] -> [2,3] -> [1,2] -> [0,1] -> [-1,0]   
Time from [1,1] to [3,4] = 3 seconds 
Time from [3,4] to [-1,0] = 4 seconds
Total time = 7 seconds

Example 2:

Input: points = [[3,2],[-2,2]]
Output: 5

Note:

points.length == n
1 <= n <= 100
points[i].length == 2
-1000 <= points[i][0], points[i][1] <= 1000

解析

根据题意,就是找出遍历 points 中所有点经过的所有距离,不管是水平、垂直还是斜角运动都是距离单位为 1 。看例子中的图可以知道,当两个点为水平或者是垂直的时候,只需要将距离差加到结果 r 即可;当两个点的垂直和水平距离相等的时候,只需要将水平或者垂直距离差加到结果 r 即可;当两个点的垂直和水平距离不相等的时候,只需要将较大值距离差加到结果 r 即可,遍历结束得到 r 即为结果。

解答

class Solution(object):
    def minTimeToVisitAllPoints(self, points):
        """
        :type points: List[List[int]]
        :rtype: int
        """
        r = 0
        if len(points) == 1:
            return r
        for i in range(1, len(points)):
            x_a, y_a = points[i - 1][0], points[i - 1][1]
            x_b, y_b = points[i][0], points[i][1]
            m = abs(x_a - x_b)
            n = abs(y_a - y_b)
            if x_a == x_b or y_a == y_b:
                r += m + n
            elif m != n:
                r += max(m, n)
            else:
                r += m
        return r
        	      
		

运行结果

Runtime: 40 ms, faster than 77.36% of Python online submissions for Minimum Time Visiting All Points.
Memory Usage: 13.5 MB, less than 57.14% of Python online submissions for Minimum Time Visiting All Points.

原题链接:leetcode.com/problems/mi…

您的支持是我最大的动力