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

目录
  • 题目描述
  • 思路分析
  • AC 代码

题目描述

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访问所有点最小时间的资料请关注我们其它相关文章!

(0)

相关推荐

  • go语言题解LeetCode453最小操作次数使数组元素相等

    目录 题目描述 思路分析 AC 代码 小结 遍历数组一次 解题思路 代码 强行找规律 解题思路 代码 题目描述 原题链接 : 453. 最小操作次数使数组元素相等 - 力扣(LeetCode) (leetcode-cn.com) 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. 示例 1: 输入:nums = [1,2,3] 输出:3 解释: 只需要3次操作(注意每次操作会增加两个元素的值): [1,2,3] => [2,3,3

  • Go语言题解LeetCode1260二维网格迁移示例详解

    目录 题目描述 示例 1: 示例 2: 示例 3: 思路分析 AC 代码 题目描述 1260. 二维网格迁移 - 力扣(LeetCode) 给你一个 m 行 n 列的二维网格 grid 和一个整数 k.你需要将 grid 迁移 k 次. 每次「迁移」操作将会引发下述活动: 位于 grid[i][j] 的元素将会移动到 grid[i][j + 1]. 位于 grid[i][n - 1] 的元素将会移动到 grid[i + 1][0]. 位于 grid[m - 1][n - 1] 的元素将会移动到 

  • go语言题解LeetCode66加一示例详解

    目录 题目描述 思路分析 AC 代码 小结 JavaScript 66题 代码 python3 循环判断 分析: JAVA解决进位问题 解题思路 代码 题目描述 原题链接 : 66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123. 示例 2:

  • go语言题解LeetCode88合并两个有序数组示例

    目录 题目描述 思路分析 AC 代码 题目描述 原题链接 : 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列. 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中.为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素

  • Go语言题解LeetCode35搜索插入位置示例详解

    目录 题目描述 思路分析 AC 代码 总结 优先考虑边界情况 红蓝标记解法 代码 题目描述 原题链接 : 35. 搜索插入位置 - 力扣(LeetCode) (leetcode-cn.com) 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 请必须使用时间复杂度为 O(log n) 的算法. 示例 1: 输入: nums = [1,3,5,6], target = 5 输出: 2 示例 2: 输入: nums = [1,3

  • go语言题解LeetCode1275找出井字棋的获胜者示例

    目录 题目描述 思路分析 AC 代码 题目描述 1275. 找出井字棋的获胜者 - 力扣(LeetCode) A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上. 第一个玩家 A 总是用 "X" 作为棋子,而第二个玩家 B 总是用 "O" 作为棋子. "X" 和 "O" 只能放在空方格中,而不能放在已经被占用的方格上. 只要有 3 个相同的(

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

    目录 题目描述 思路分析 AC 代码 题目描述 1266. 访问所有点的最小时间 - 力扣(LeetCode) 平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi] .请你计算访问所有这些点需要的 最小时间(以秒为单位). 你需要按照下面的规则在平面上移动: 每一秒内,你可以: 沿水平方向移动一个单位长度,或者 沿竖直方向移动一个单位长度,或者 跨过对角线移动 sqrt(2) 个单位长度(可以看作在一秒内向水平和竖直方向各移动一个单位长度). 必须按照数组中出现的

  • go语言通过odbc访问Sql Server数据库的方法

    本文实例讲述了go语言通过odbc访问Sql Server数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,开源地址为:https://github.com/weigj/go-odbc 复制代码 代码如下: package main; import (     "fmt"     "database/sql"     _"odbc/driver" ) func main(){     conn,err := sql.O

  • go语言题解LeetCode1122数组的相对排序

    目录 题目描述 1122. 数组的相对排序 - 力扣(LeetCode) 给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中. 对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同.未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾. 示例 1: 输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] 输出:[2,2,2,1,4

  • go语言题解LeetCode674最长连续递增序列

    目录 题目描述 思路分析 AC 代码 题目描述 674. 最长连续递增序列 给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度. 连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列. 示例 1: 输入:nums = [1,3,5

  • Go语言题解LeetCode705设计哈希集合

    目录 题目描述 思路分析 AC 代码 题目描述 705. 设计哈希集合 不使用任何内建的哈希表库设计一个哈希集合(HashSet). 实现 MyHashSet 类: void add(key) 向哈希集合中插入值 key . bool contains(key) 返回哈希集合中是否存在这个值 key . void remove(key) 将给定值 key 从哈希集合中删除.如果哈希集合中没有这个值,什么也不做.   示例: 输入: ["MyHashSet", "add&quo

  • Go语言题解LeetCode724寻找数组的中心下标

    目录 题目描述 思路分析 AC 代码 题目描述 724. 寻找数组的中心下标 - 力扣(LeetCode) (leetcode-cn.com) 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和. 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素.这一点对于中心下标位于数组最右端同样适用. 如果数组有多个中心下标,应该返回 最靠近左边 的那一个.如果数组不存在中心下标,返回 -

  • Go语言题解LeetCode888公平糖果交换示例详解

    目录 一 描述 二 分析 三 答案 一 描述 888. 公平的糖果交换 - 力扣(LeetCode) (leetcode-cn.com) 爱丽丝和鲍勃拥有不同总数量的糖果.给你两个数组 aliceSizes 和 bobSizes ,aliceSizes[i] 是爱丽丝拥有的第 i 盒糖果中的糖果数量,bobSizes[j] 是鲍勃拥有的第 j 盒糖果中的糖果数量. 两人想要互相交换一盒糖果,这样在交换之后,他们就可以拥有相同总数量的糖果.一个人拥有的糖果总数量是他们每盒糖果数量的总和. 返回一个

  • go语言题解LeetCode989数组形式的整数加法

    目录 题目描述 思路分析 AC 代码 题目描述 989. 数组形式的整数加法 - 力扣(LeetCode) 整数的 数组形式  num 是按照从左到右的顺序表示其数字的数组. 例如,对于 num = 1321 ,数组形式是 [1,3,2,1] . 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 . 示例 1: 输入:num = [1,2,0,0], k = 34 输出:[1,2,3,4] 解释:1200 + 34 = 1234 示例 2: 输入:num

随机推荐