タイトル説明:
非負の整数の配列が与えられると、最初は配列の最初の位置にいます。
配列内の各要素は、その位置でジャンプできる最大長を表します。
最後の位置に到達できるかどうかを判断します。
例1:
入力:[2,3,1,1,4]
出力:true
説明:最初に1ステップジャンプし、位置0から位置1に移動してから、位置1から最後の位置に3ステップジャンプできます。
例2:
入力:[3,2,1,0,4]
出力:false
説明:何があっても、常にインデックス3の位置に到達します。ただし、この位置での最大ジャンプ長は0であるため、最後の位置に到達することはできません。
アイデア:貪欲なアルゴリズム。ジャンプできる配列値の最大値を見つけるたびに、この最大値を最後までジャンプできるかどうかを確認してください。最後までジャンプできません。ジャンプする最大値を選択してください。次に、上記の操作を繰り返します。
class Solution {
public:
bool canJump(vector<int>& nums) {
int n = nums.size();
int rightmost = 0; //最远可以到达的地方
//遍历数组
for (int i = 0; i < n; ++i) {
if (i <= rightmost) {
//如果较大值可以到达,则说明可以到达
rightmost = max(rightmost, i + nums[i]);
if (rightmost >= n - 1) {
return true;
}
}
}
return false;
}
};
参照アドレス:https://leetcode-cn.com/problems/jump-game/solution/tiao-yue-you-xi-by-leetcode-solution/