https://leetcode.com/problems/jump-game/#/description
这道题是说,给定一个数组,数组中每个元素表示当前位置最大能前进的数,最开始在第一个元素所在的位置,判断是否能到达终点。
题目的tag是贪心算法,一开始我认为从前往后看,每一步走争取最大步数,能走多远就是多远。
public class Solution {
public boolean canJump(int[] nums) {
int jumpNum = 0;
for(int i = 0;i < nums.length;i++){
if(nums[i] > jumpNum){
jumpNum = nums[i];
}
if(jumpNum >= nums.length - i - 1){
return true;
}
if(jumpNum == 0){
return false;
}
jumpNum --;
}
return false;
}
}
看了眼大家的讨论,这道题从后往前做有个思路:如果从终点开始寻找,前一个点可以到达终点,那么以前一个点为终点,继续寻找,直到找到起点。
public class Solution {
public boolean canJump(int[] nums) {
int last = nums.length - 1;
for(int i = nums.length - 2;i >= 0;i --){
if(nums[i] + i >= last){
last = i;
}
}
return last <= 0;
}
}