55. Jump Game
Description
描述:https://leetcode.com/problems/jump-game/description/
题意:给定一维数组,数组中的值表示该位置能往后跳的最大位置,求是否能到达数组的最后一个位置。
Solution: (Java)
class Solution {
public boolean canJump(int[] nums) {
int max = 0;
for (int i = 0; i < nums.length; i++) {
if (max >= nums.length-1 || i > max)
break;
max = Math.max(max, i + nums[i]);
}
return max >= nums.length-1;
}
}
思路
- 刚开始用的是递归回溯法,结果在最后两个测试用例上超时了,可能是哪里剪枝不到位吧。上面的思路是贪心算法,runtime超过99%;
- 因为本题只关心能不能到达最后一个位置,所以只需记录最大能到达的位置
max
即可; - 除了
max >= nums.length-1
这一明显的跳出条件外,不能到达当前的遍历位置即i > max
这一条件也非常重要。