Go语言题解LeetCode1266访问所有点的最小时间示例

 更新时间:2023年01月05日 14:28:25   作者:刘09k11  
这篇文章主要为大家介绍了Go语言题解LeetCode1266访问所有点的最小时间示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目描述

1266. 访问所有点的最小时间 - 力扣(LeetCode)

平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi] 。请你计算访问所有这些点需要的 最小时间(以秒为单位)。

你需要按照下面的规则在平面上移动:

每一秒内,你可以:

  • 沿水平方向移动一个单位长度,或者
  • 沿竖直方向移动一个单位长度,或者
  • 跨过对角线移动 sqrt(2) 个单位长度(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。

必须按照数组中出现的顺序来访问这些点。

在访问某个点时,可以经过该点后面出现的点,但经过的那些点不算作有效访问。  

示例 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 秒

示例 2:

输入:points = [[3,2],[-2,2]]
输出:5

提示:

points.length == n

1 <= n <= 100

points[i].length == 2

-1000 <= points[i][0], points[i][1] <= 1000

思路分析

根据题意和图可知道

如果两点的x,y值的差值的绝对值相等

则绝对值就是用的时间,如果绝对值不相等

则时间为x,y的差值中的绝对值较小的一个值再加上大的差值减去小的差值的差

AC 代码

class Solution {
    public int minTimeToVisitAllPoints(int[][] points) {
        // 会用到的时间
        int time = 0;
        // 上一个点的位置
        int[]  prev = null;
        // 遍历数组
        for (int[] item : points) {
            // 只有上个点有数据才处理
            if (!Objects.isNull(prev)) {
                // 获取到x,y坐标的值
                int xValN = item[0];
                int yValN = item[1];
                int xValP = prev[0];
                int yValP = prev[1];
                // 取到差值的绝对值
                int xDifference = getAbsoluteValue(xValN - xValP);
                int yDifference = getAbsoluteValue(yValN - yValP);
                // 取差值的最小值
                int minValue = Math.min(xDifference, yDifference);
                // 取x,y坐标差值的差值的绝对值
                int moreValue = getAbsoluteValue(xDifference - yDifference);
                // 累加时间
                time += (minValue + moreValue);
            }
            // 给上个点赋值
            prev = item;
        }
        return time;
    }
    private int getAbsoluteValue(int value) {
        return value > 0 ? value : (value * -1);
    }
}

以上就是Go语言题解LeetCode1266访问所有点的最小时间示例的详细内容,更多关于Go访问所有点最小时间的资料请关注脚本之家其它相关文章!

相关文章

  • go mod 依赖管理的具体使用

    go mod 依赖管理的具体使用

    在Go语言开发中,依赖管理是一项非常重要的工作,Go mod作为官方的包管理工具已经成为了Go语言依赖管理的首选方式,本文就来介绍一下go mod 依赖管理的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Golang 限流器的使用和实现示例

    Golang 限流器的使用和实现示例

    这篇文章主要介绍了Golang 限流器的使用和实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • go中make用法及常见的一些坑

    go中make用法及常见的一些坑

    golang分配内存主要有内置函数new和make,下面这篇文章主要给大家介绍了关于go中make用法及常见的一些坑,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 浅析Go中序列化与反序列化的基本使用

    浅析Go中序列化与反序列化的基本使用

    序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程,反向过程称为“反序列化”。本文主要介绍了Go中序列化与反序列化的基本使用,需要的可以参考一下
    2023-04-04
  • gRPC中拦截器的使用详解

    gRPC中拦截器的使用详解

    这篇文章主要介绍了gRPC中拦截器的使用详解,本次主要介绍在gRPC中使用拦截器,包括一元拦截器和流式拦截器,在拦截器中添加JWT认证,客户端登录之后会获得token,请求特定的API时候需要带上token才能访问,需要的朋友可以参考下
    2023-10-10
  • goland 设置注释模板的过程图文详解

    goland 设置注释模板的过程图文详解

    这篇文章主要介绍了goland 设置注释模板的过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-12-12
  • GO语言类型转换和类型断言实例分析

    GO语言类型转换和类型断言实例分析

    这篇文章主要介绍了GO语言类型转换和类型断言,以实例形式详细分析了类型转换和类型断言的概念与使用技巧,需要的朋友可以参考下
    2015-01-01
  • GoLand利用plantuml生成UML类图

    GoLand利用plantuml生成UML类图

    本文主要介绍了GoLand利用plantuml生成UML类图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 通过Golang实现linux命令ls命令(命令行工具构建)

    通过Golang实现linux命令ls命令(命令行工具构建)

    这篇文章主要为大家详细介绍了如何通过Golang实现一个linux命令ls命令(命令行工具构建),文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-01-01
  • Go语言建议多使用切片少使用数组原理探究

    Go语言建议多使用切片少使用数组原理探究

    这篇文章主要为大家介绍了Go语言建议多使用切片少使用数组原理探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01

最新评论