太抽象了这题的解法,明明写着是跳跃游戏,但是却要数组从左到右一个一个遍历,所以这题千万不要真的去跳跃nums[i]格。
既像动态规划又像贪心
public boolean canJump(int[] nums) {
int len = nums.length;
int rightMost = 0;
for (int i = 0; i < len; i++) {
if (i <= rightMost) {
rightMost = Math.max(rightMost, i + nums[i]);
if (rightMost >= len - 1) {
return true;
}
}
}
return false;
}
nums = [2,3,1,1,4]
nums = [3,2,1,0,4]
i + nums[i],i表示距离开头的距离,rightMost = i + nums[i]则表示可以跳多远。如果i < rightMost,说明指针已经超过了最远可到达的距离,但是你还没跟上来,返回false。