zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    vue学习
    BBS登录注册技术点归纳
    BBS项目模态框的使用
    django后台管理系统
    java 之 jsp简介
    http 之 CORS简介
    web 之 session
    linux 之学习路线
    Ubuntu 之 win10更新ubuntu启动项消失
    Web 之 Cookie
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10163040.html
Copyright © 2011-2022 走看看