前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。
博客链接:mcf171的博客
——————————————————————————————
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
public class Solution {
public boolean canJump(int[] nums) {
if (nums.length == 0) return false;
if(nums.length == 1) return true;
if(nums.length == 2) return nums[0] > 0;
int[] extendsArray = new int[nums.length];
for(int i = nums.length - 2 ; i >= 0 ; i --){
if(i == nums.length -2)extendsArray[i] = nums[i] > 0 ? -1 : 0;
else{
if(nums[i] + i >= nums.length - 1) extendsArray[i] = -1;
else if(nums[i] == 0){
if(extendsArray[1+i] == -1){ extendsArray[i] = i + 1;}
else if(extendsArray[1+i] == 0){extendsArray[i] = 0;}
else if(extendsArray[1+i] > 0){extendsArray[i] = extendsArray[i+1];}
}else{
if(extendsArray[1+i] == -1){extendsArray[i] = -1;}
else if(extendsArray[1+i] > 0){ extendsArray[i] = nums[i] + i >= extendsArray[1+i] ? -1 : extendsArray[1+i];}
else if(extendsArray[1+i] ==0){extendsArray[i] = 0;}
}
}
}
return extendsArray[0] == -1;
}
}
看了一下,还有更机智的解法,也是6的不行。
Your runtime beats 12.29% of java submissions.
public class Solution {
public boolean canJump(int[] nums) {
int reachable = 0;
for (int i=0; i<nums.length; ++i) {
if (i > reachable) return false;
reachable = Math.max(reachable, i + nums[i]);
}
return true;
}
}