LEETCODE (5/27)(Java)

题目:跳跃游戏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;
    }
}