![Minimum number of jumps to reach end using Java](https://img.php.cn/upload/article/000/000/000/173890093783570.jpg)
このJavaコードは、各要素がその位置からの最大ジャンプ距離を表す配列を通過するために必要な最小ジャンプを計算します。 アルゴリズムとコードを段階的に調べてみましょう。目標は、インデックス0から始まるアレイの終わりに到達するために必要な最も少ないジャンプを見つけることです。終了が到達できない場合、関数は-1。
。
問題定義:
アレイが与えられている
arr[]arr[i]
アルゴリズム:
アルゴリズムは貪欲なアプローチを採用しており、配列を介して反復し、各ステップで最も遠い到達可能なインデックス()を追跡します。 各ジャンプ内の進捗を追跡するために
カウンターと
を維持します。
maxReach
jumps
steps
初期化:
-
:ジャンプの総数をカウントします。 0に初期化されています。
- :現在の位置から到達可能な最も遠いインデックス。
jumps
。 に初期化されています
-
maxReach
:現在のジャンプ内に残っているステップ数。 arr[0]
。 に初期化されています
-
steps
arr[0]
反復:
-
コードは配列を介して繰り返します。
各要素について
::-
更新- 最大
arr[i]
および(現在の位置から最も遠い到達可能なインデックス)。
- decrement
maxReach
(1つのステップを踏みました)。maxReach
i arr[i]
が0になった場合、現在のジャンプのステップを使い果たしたことを意味します。 したがって、
- 増分
steps
。
-
steps
が以下である場合、それは私たちが行き詰まっていて、さらに到達できないことを意味します。 return -1。-
jumps
reset to- (次のジャンプの残りの手順)。
maxReach
i
-
steps
maxReach - i
終了:
- ループが-1を返さずに完了した場合、端に到達可能になることを意味します。 関数は
。を返します
時間と空間の複雑さ:
-
時間の複雑さ:o(n)、nは配列の長さです。 コードは、配列を1回繰り返します。
-
スペースの複雑さ: o(1)、アルゴリズムは一定の余分なスペースを使用しているためです。
この改善された説明とコードは、アルゴリズムとその実装のより明確な理解を提供します。 追加されたコメントは読みやすさを向上させ、エッジケースの処理(空またはシングルエレメント配列)により、コードがより堅牢になります。
以上がJavaを使用して到達するための最小ジャンプ数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。