leetcode 1266. Minimum Time Visiting All Points(python)

描述

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:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yScyxLDo-1621670842538)(https://assets.leetcode.com/uploads/2019/11/14/1626_example_1.PNG)]

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.

原题链接:https://leetcode.com/problems/minimum-time-visiting-all-points/

您的支持是我最大的动力

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大丫丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值