• Jump Game


    题目描述:

    给定一个非负的整数数组,起点为数组的第一个位置,每一个数组元素的值表示从该位置能向前跳的最大值,判断能否到达该数组的最后一个位置。例如:A = [2,3,1,1,4], 从第一个位置开始该数为2向前跳2,到达第三个位置,该数为1向前跳1,到达第四个位置,该数为1向前跳1,到达最后一个位置,所以返回true。A = [3,2,1,0,4],从一个位置开始,该数为3向前跳3,到达第四个位置,该数为0无法向前跳,再从第二个位置开始,同理最后也只能到第四个位置,所以返回false。

    分析:当nums[i]==0&&sum<i+1时,其中i表示当前位置,sum表示最大到达的位置,此时就像上述例子,只能停留在第四个位置。每次当nums[i]+i>sum,且nums[i]不为0时,我们都要更新sum值,sum=nums[i]+i。具体代码如下:

     1 bool canJump(vector<int>& nums) {
     2         int n=nums.size(),sum=0;
     3         if(n<=1) return true;
     4         for(int i=0;i<n-1;i++)
     5         {
     6             if(nums[i]==0&&sum<i+1) return false;
     7             if(nums[i]+i>sum&&nums[i]>0)
     8             {
     9                 sum=nums[i]+i;
    10                 if(sum>=n-1) return true;
    11             }
    12         }
    13         return false;
    14     }

    在上题的基础上,我们要求求出到达最后一个位置所跳最少的步数。例如A = [2,3,1,1,4],从第一个位置跳到第二的位置,然后可以直接跳到最后一个位置,最少步数为2.

    分析:我们用一个变量count记录跳跃的步数,用变量last和cur分别记录上一次跳跃的最远距离和当前一次跳跃的最远距离,在循环遍历时,只有在i等于last记录数时,count才加1,当cur记录数大于等于数组最后一个位置时,返回count+1,当无法达到最后一个位置时返回-1.

     1 int jump(vector<int>& nums) {
     2          int step_count = 0;
     3          int last_jump_max = 0;
     4          int current_jump_max = 0;
     5          int length = nums.size();
     6          if (length <= 1) return 0;
     7          for (int i = 0; i<length; i++)
     8          {
     9            current_jump_max = max(current_jump_max, i + nums[i]);    
    10            if (current_jump_max >= length - 1)
    11                 return step_count+1;
    12            else
    13            {
    14             if (i == last_jump_max)
    15             {
    16                 step_count++;
    17                 last_jump_max = current_jump_max;
    18             }
    19            }
    20          }
    21          return -1;
    22     }
  • 相关阅读:
    11.1作业
    10.25作业
    10.18作业
    zancun
    10.11作业
    SQL日期格式,转自will哥
    转自pnljs 委托(Func<int,bool>)
    ORM即 对象-关系映射(转自:微冷的雨)
    跨域上传文件(还是没有明白)
    webSocket详解
  • 原文地址:https://www.cnblogs.com/zhulong890816/p/4644117.html
Copyright © 2020-2023  润新知