题目:跳跃游戏1(LeetCode No.55)

初次解法
//初次解题
class Solution {
public boolean canJump(int[] nums) {
int index=0;
int next=0;
int max=0;
int max_next=0;
if(nums[0]==0&&nums.length==1){
return true;
}
boolean answer = false;
while(index<nums.length){
if(index+nums[index]<nums.length-1){
next=nums[index];
for(int i=1;i<=next;i++){
if((nums[index+i]+index+i)>max){
max=nums[index+i]+index+i;
max_next=i;
}
}
while(nums[index+max_next]==0&&max_next>0){
max_next--;
}
if(next==0){
break;
}
if(max_next==0){
break;
}
index+=max_next;
max=0;
}
else{
answer=true;
break;
}
}
return answer;
}
}
优秀解法
//对比优秀解题
class Solution {
public boolean canJump(int[] nums) {
int n=1;
for(int i=nums.length-2;i>=0;i--){
if(nums[i]>=n)
{
n=1;
}
else
{
n++;
}
if(i==0&&n>1)
{
return false;
}
}
return true;
}
}
题目:跳跃游戏2(LeetCode No.45)

初次解法
//初次解题
class Solution {
public int jump(int[] nums) {
int index=0;
int next=0;
int max=0;
int max_next=0;
if(nums.length==1){
return 0;
}
int answer = 0;
while(index<nums.length){
if(index+nums[index]<nums.length-1){
next=nums[index];
for(int i=1;i<=next;i++){
if((nums[index+i]+index+i)>max){
max=nums[index+i]+index+i;
max_next=i;
}
}
while(nums[index+max_next]==0&&max_next>0){
max_next--;
}
if(next==0){
break;
}
if(max_next==0){
break;
}
index+=max_next;
answer++;
max=0;
}
else{
answer++;
break;
}
}
return answer;
}
}
优秀解法
//对比优秀解题
class Solution {
public int jump(int[] nums) {
if(nums.length == 1) return 0;
int reach = 0;
int nextreach = nums[0];
int step = 0;
for(int i = 0;i<nums.length;i++){
nextreach = Math.max(i+nums[i],nextreach);
if(nextreach >= nums.length-1) return (step+1);
if(i == reach){
step++;
reach = nextreach;
}
}
return step;
}
}