前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法题之跳跃游戏

算法题之跳跃游戏

作者头像
挥刀北上
发布2019-07-19 15:12:56
6590
发布2019-07-19 15:12:56
举报
文章被收录于专栏:Node.js开发Node.js开发

上期新建了一个专栏并发布了一道算法题,今天继续,今天给大家带来的题目名为“跳跃游戏”。题目如下:

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

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

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

示例 1:

代码语言:javascript
复制
输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。

示例 2:

代码语言:javascript
复制
输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 ,
 所以你永远不可能到达最后一个位置。

实例2用一张图来表示一下:

这道题该如何解答呢?首先分析一下,数组中如果没有0的话一定能跳到最后一个位置。如图:

通过观察发现:

如果数组中不存在0,一定可以跳到最后。如果数组中存在0的情况下,要跳到最后必须满足以下条件,从0前边的某一个位置上开始跳跃一定能跳过这个0才可以。

例如例2中的数组,如果是以下几种情况就可以跳到最后:

代码语言:javascript
复制
1、[4,2,1,0,4]
2、[3,3,1,0,4]
3、[3,2,2,0,4]

如图所示:

可以看到上面的图都能满足:从0前边的某一个位置上开始跳跃一定能跳过这个0才可以。但是怎么将这句话转换为逻辑代码呢?规律是什么呢?假装思考10秒钟......

思考中......

发现了什么规律呢?游戏者所在的位置的数值一定要大于0所在位置索引值当前位置索引值的距离差。

代码语言:javascript
复制
4>3-0;4所在的位置索引值为0,距离0的索引值相差3,4>3,所以可以跳过0,依次类推
3>3-1;
2>3-2;

找到了这道题的核心解法之后,大体思路就是,找出数组中所有0的位置,并且判断此位置之前的所有数字是否能跳过0的位置。代码如下:

代码语言:javascript
复制
var canJump = function(nums) {
  var canJump0List = [];

  for (var i = 0; i < nums.length - 1; ++i) {
    if (nums[i] === 0) {
//找到0所在位置,标记为false
      var canJump0 = false;
//进行判断,将此位置之前数字进行判断,只要有一个能满足条件就可以跳过这个0
      for (var j = i - 1; j >= 0; --j) {
// 游戏者所在的位置的数值一定要大于0所在位置索引值与当前位置索引值的距离差           
       if (nums[j] > i - j) {
          canJump0 = true;
          break;
        }
      }
//数组中可能有多个0;所以讲所有0判断的结果放入一个数组
      canJump0List.push(canJump0);
    }
  }
//最后对数组进行判断,只要有一个不满足条件返回false,即不能跳到最后
  for (var i = 0; i < canJump0List.length; ++i) {
    if (!canJump0List[i]) {
      return false;
    }
  }

  return true;
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nodejs全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档