题意:
个人解答:
class Solution {
public boolean canJump(int[] nums) {
if(nums.length==1 || nums[0]>=nums.length ) return true;
int start=0;
int end=0;
int max=0;
while(end<nums.length-1){
for(int i=start;i<=end;i++){
if(nums[i]+i>max){
//max=nums[i]+i;
max=Math.max(max,nums[i]+i);
}
}
start=end+1;
end=max;
if(end>=nums.length-1) return true;
if(end<nums.length-1 && nums[end]==0 ) return false;
//if(end>=nums.length-1) return true;
}
return false;
}
}
但是只有不能全通关
官方解答:
我前面不行就是因为 一下最最大的 num[0]=2 nums[2]=0 然后就返回false
但实际上前面的还行 所以要走前面的 就可以每步都比较一下 max始终保存最大的
class Solution {
public boolean canJump(int[] nums) {
int len=nums.length;
if(len==1) return true;
int max=nums[0];
for(int i=1;i<len-1;i++){//每一步都比一下 max 始终选取最大的那个
if(i<=max){
max=Math.max(nums[i]+i,max);//2 1 0 0
}
}
return max>=len-1;
}
}