[LeetCode] [Java]ジャンプゲームII



Jump Game Ii



トピック:

非負の整数の配列が与えられると、最初は配列の最初のインデックスに配置されます。

配列の各要素は、その位置での最大ジャンプ長を表します。



あなたの目標は、ジャンプの最小数で最後のインデックスに到達することです。

例えば:
与えられた配列A = [2,3,1,1,4]



最後のインデックスに到達するためのジャンプの最小数は2です。 (ジャンプ1はインデックス0から1にステップし、次に3は最後のインデックスにステップします。)


質問の意味:


負でない整数配列が与えられます。配列の開始位置にある初期化位置を指定します。



配列の各要素は、この位置でジャンプできる最大距離を表します。

目標は、最小のホップ数を使用して配列の最後に到達することです。

例:与えられたA =[2,3,1,1,4]

配列2の最後にジャンプするための最小ステップ数(インデックス0から1のステップ1から、その後のステップ3がインデックスの最後に到達します)。


アルゴリズムの分析:

はいと考える主な問題。アレイをスキャンして、現在のノードをカバーできる最も遠い場所を特定します。 maxreachを置きます。

次に、現在の距離がリーチで計算されたカバレッジを超えるまでスキャンを続け、カバレッジを更新すると同時に、記事番号を更新します。これは、マルチホップのタレントが前進するためです。

比喩的に言えば、これは最も貪欲なジャンプごとの戦いです。

* Ret:これまでのジャンプ数


* curRch:Aからジャンプした後のret時間に達する[0]が最大範囲です


* curMax:0〜iからA i +1要素が最大範囲を達成できます

* curRchの場合

*記録されたcurMax。



ACコード:

/** * Ret: the number of jump until now * CurRch: ret time reaches After jump from the A [0] is the maximum range * CurMax: 0 ~ i from which an A i + 1 elements can achieve a maximum range * When curRch

* / public class Solution {public int jump(int [] nums){int ret = 0 int curMax = 0 int curRch = 0 for(int i = 0 i