問題の意味は:配列インデックス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; } };