欢迎大家分享想法以及指教,让我们一起学习
先看题目
简单来说就是数组中每个元素都是你可以走的步数,让你一个挨着一个走看看能不能走出种点,
需要注意两点:
1.假如数组内只有一个元素,不管里面是多少步都返回true,因为已经就是终点了
2.如果你的步数只能走到当前了那么你就不可能到达终点了
还是使用贪心算法:你只需要遍历数组,只关心现在的步数够不够走到终点即可
具体代码:
class Solution {
public boolean canJump(int[] nums) {
if(nums==null||nums.length==0){
return false;
}
//只有一个元素,就是终点了
if(nums.length==1){
return true;
}
int maxLength = 0;
//不需要遍历最后一个元素因为是终点
for (int i = 0; i < nums.length-1; i++) {
//看看最大步数在哪
maxLength=Math.max(maxLength,i+nums[i]);
//如果这个最大步数可以直接到达终点,即可直接返回
if(maxLength>=nums.length-1){
return true;
}
//假如当前最大只能走到这里了那么就无法继续向前了
if(maxLength==i){
return false;
}
}
return false;
}
}