首页 > 其他 > 详细

Leetcode 55.跳跃游戏

时间:2018-12-23 00:49:12      阅读:147      评论:0      收藏:0      [点我收藏+]

跳跃游戏

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

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

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

示例 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.跳跃游戏

原文:https://www.cnblogs.com/kexinxin/p/10163040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!