• 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 }
  • 相关阅读:
    内置函数
    map,reduce和filter函数
    函数式编程和尾调用
    函数作用域,匿名函数
    全局变量和局部变量
    函数和过程
    百分号字符串拼接
    集合关系运算交,差,并集
    C#基础-压缩文件及故障排除
    【QQ】前端实现QQ会话功能
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10163040.html
Copyright © 2020-2023  润新知