[2019年11月28日]アルゴリズムレコード学習 - 最小の時間のすべてのポイントへのアクセスを

アルゴリズム - すべてのポイントまでの最小時間のアクセス


面内のn個の点のうち、点の位置は、整数座標と点[I] = [XI、YI]を示しています。(秒)に必要なすべてのポイントまでの最小時間のアクセスを計算してください。

あなたは、次の規則に従って面内で移動することができます。

単位長さに沿って、又は対角線を挟んで第2の水平方向または垂直方向(各移動は1秒以内の水平及び垂直方向の単位長さとみなすことができます)。
あなたはこれらの点にアクセスするには、配列の順序で表示されなければなりません。

例1:

例1枚の画像

入力:点= [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:

入力:点= [3,2]、 [ - 2,2]
出力:5

ヒント:

  1. points.length == n個
  2. 1 <= N <= 100
  3. 点[i]は.LENGTH == 2
  4. -1000 <=点[i]が[0]、ポイント[I] [1] <= 1000

出典:滞在ボタン(LeetCode)

class Solution {
    public int minTimeToVisitAllPoints(int[][] points) {
        int sum = 0;
        for (int i = 0; i < points.length-1; i++) {
            sum += Math.max(Math.abs(points[i][0] - points[i + 1][0]), Math.abs(points[i][1] - points[i + 1][1]));
        }
        return sum;
    }
}

考え
比較した後、Xは、大きな距離yから二点間の比較は、そのカウント二点間のより大きな距離がある方、実際には大です。

注釈

  1. 絶対値方式:
int number = -2;
int absNumber = Math.abs(number);
  1. 2つの数の最大値を取ります:
int a = 3;
int b = 4;
Math.max(a,b); //输出4
  1. 上の二次元配列使用法:

二次元アレイは、アレイの配列の各要素:のように理解することができます。

  • 例1:
int[][] arr = new int[a][b];

アレイの数を表す二次元アレイ;
Bは、各々 、一次元配列の要素の数を表します。

int[][] arr = new int[2][3];

この二次元配列は2次元配列を有し、それは以下のように表される:ARR [0]、ARR [ 1];
3つの要素と各一次元アレイの各要素は、呼び出しに書き込まれた:ARR [A] [B] 、A いくつかの配列の最初を表し、Bはビットを表します。

  • 例2:
int[][] arr = new int[a][];

二次元アレイは、アレイの数を表すが、要素の数は、一次元アレイ、動的に与えることができるの数を与えられていません。

int[][] arr = new int[2][];
arr[0] = new int[3];
arr[1] = new int[1];
  • 例3:
int[][] arr = {{12}{3456}{789}}

直接二次元アレイに宣言に示されています。

公開された17元の記事 ウォンの賞賛0 ビュー337

おすすめ

転載: blog.csdn.net/cletitia/article/details/103299863