leetcode-45。ジャンパII(ハード)

非負整数配列を考えると、あなたは最初に、配列の最初の位置にあります。

配列の各要素は、あなたがその位置にジャンプすることができた最大の長さを表しています。

あなたの目標は、使用することですホップの最小数を配列の最後の位置に到達します。

例:

入力:[2,3,1,1,4]
出力:2
説明:ホップの最小数は、最後の位置にジャンプが2です。
  、インデックスにインデックス0から1の位置、1段ジャンプジャンプジャンプし、ステップ3は、アレイの最後の位置に到達します。
説明:

あなたと仮定すると、常に配列の最後の位置に到達することができます。

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/jump-game-ii

他の人から学ぶには、動的プログラミングを使用することを練習します。

まず最初にクリア:ポイントからポイント1つのステップのポイントを得ることができるようになります

DP [i]は点に来るために必要な手順の最小数を表します。

DP [I] - > DP [I + 1] ... DP = DP [私] [NUMSを+] [i]を+1。

アレイを介して前後、トラバース点、各点における点に達することができるエンドポイント場合、工程数がポイント+1に直接戻すように、そうでなければ、ポイントに達することができるがためにセットポイントの範囲内に到達することができませんポイント数+1ステップ。

コード:

1  クラスソリューション{
 2  公共3      INTのジャンプ(ベクトル< INT >&NUMS){
 4          INT LEN = nums.size()。
5          あれば(LEN <= 1 6              リターン 0 7          
8          ベクトル< 整数 > DP(LEN、0 );
図9は、         のためにint型 i = 0 ; iは<LEN; iは++ )//外循环、遍历各点
 10          {
 11              のためにINT J = NUMS [i]は、J> 0; J、到達することができるバックの範囲から決定される)//
 12は             、{
 13は、                 IF(Iは、J> = LENを+ 1 )//それらは直接バックエンドに達することができる場合
 14                      リターン DP [I]を+ 1 15                   IF(DPは== [iがJ +] 0 )//エンドポイントは、彼が私を指すように0とステップ数に設定されて到達しない
 16                      DP DP = [I] + [IがJを+] 1。;
 17                  そう/ /以前に、それは、前のポイントこれまでのほとんどであったし、またアップ、更新することなく
18である                     BREAK ;
 19              }
 20である         }
 21れる         返す - 1 ;
 22である     }
 23です }。

おすすめ

転載: www.cnblogs.com/yocichen/p/11464962.html