Leetcode 55.跳跃游戏

Posted kexinxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于Leetcode 55.跳跃游戏的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 55. 跳跃游戏

LeetCode #55 跳跃游戏

leetcode55跳跃游戏

Leetcode55. 跳跃游戏(JAVA贪心)

[leetcode] 55. 跳跃游戏

LeetCode:跳跃游戏55