Leetcode 55.跳跃游戏

跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]

输出: true

解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。

 1 class Solution {
 2     public boolean canJump(int[] nums) {
 3         int N=nums.length;
 4         int maxreach=0;//注意是下标值,而不是元素值
 5         for(int i=0;i!=N;i++){
 6             if(i>maxreach)//注意false的条件,就是maxreach停止了,而i仍然在增加,一直到超过maxreach也没有停止,对应题目中的反例很好理解
 7                 return false;
 8             maxreach=Math.max(maxreach,i+nums[i]);
 9             if(maxreach>=N-1)
10                 return true;
11         }
12         return true;
13     }
14 }

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
 1 class Solution {
 2     public int jump(int[] nums) {
 3         int N=nums.length;
 4         int[] maxReach=new int[N];
 5         maxReach[0]=nums[0];
 6         for(int i=1;i<N;i++){
 7             maxReach[i]=Math.max(maxReach[i-1],i+nums[i]);
 8         }
 9         int result=0;
10         int currentTarget=N-1;
11         if(N==1)
12             return 0;
13         for(int i=N-1;i>=0;i--){
14             while(i>=0 && maxReach[i]>=currentTarget)
15                 i--;
16             i++;
17             currentTarget=i;
18             result++;
19         }
20         return result;
21     }
22 }

猜你喜欢

转载自www.cnblogs.com/kexinxin/p/10163040.html