(貪欲)leetcode 55. 45.ジャンプゲームI II

問題の意味は:配列インデックス0であるから、配列に格納されている[0] = 2、0が1と2が到達できるインデックスからインデックスを表しARRような工程の数が、現在のインデックスにジャンプすることができています。あなたは、最終的なインデックスを達することができれば最後に、お願いします。

アイデア:リーチ:(0から数えて)に到達することができ、現在位置から最も遠い位置を記録し、最大値は、すべての到着に到達することができとります。

クラス解決{
 パブリックBOOL canJump(ベクトル< INT >&NUMS){
         IF(nums.size()< 2 リターン trueにint型 = REACH 0 ;   // REACH:最も遠い位置に到達するために、現在の位置からの記録
        のためにint型 I = 0 ; ++; Iは&& Iはnums.size()<= REACHを< I){ 
            REACH = MAX(REACH、Iは+ NUMSを[I]);
             IF(REACH> = nums.size() - 1// テール到達するまでの
                リターン をtrueにします
        } 
        を返す 
    } 
}。

質問の意味:最終位置に到達するためのステップ数の最小値を返します。

 

class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.empty() || nums.size() <=1)
            return 0;
        //cur_max : 当前位置所能到达的最远位置,next_max: 下一步所能到达的最远位置
        int cur_max = 0, next_max = 0, step = 0, index = 0;
        while(index <= cur_max){
            
            while(index <= cur_max){
                //计算每一步中所能达到的最大位置
                next_max = max(next_max, index+nums[index]);
                index ++;
            }
            cur_max = next_max;
            step ++;
            if(cur_max >= nums.size()-1)
                return step;
        }
        return 0;
    }
};

 

おすすめ

転載: www.cnblogs.com/Bella2017/p/11234728.html