Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✅55. 跳跃游戏 #25

Open
bazinga-web opened this issue Jun 9, 2020 · 2 comments
Open

✅55. 跳跃游戏 #25

bazinga-web opened this issue Jun 9, 2020 · 2 comments

Comments

@bazinga-web
Copy link

55. 跳跃游戏

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

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

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

示例 1:

输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1  3 步到达最后一个位置。

示例 2:

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0  所以你永远不可能到达最后一个位置。
@bazinga-web
Copy link
Author

解题思路:
贪心算法

  1. 记录最后一位的索引作为初始maxJump值
  2. 从后往前遍历数组,计算当前索引加上当前值是否大于等于maxJump,意味着是否有能力到达终点,若可以重写当前索引为maxJump
  3. 最后判断maxJump是否为0,不为零意味着卡在中间某一步。
/**
 * @param {number[]} nums
 * @return {boolean}
 */
var canJump = function (nums) {
  let maxJump = nums.length - 1;
  for (let i = nums.length - 2; i >= 0; i--) {
    if (nums[i] + i >= maxJump) {
      maxJump = i;
    }
  }
  return maxJump === 0;
};

@Ray-56
Copy link
Owner

Ray-56 commented Jun 10, 2020

动态规划解

也就是求 楼梯数与当前楼梯可跳跃的最大次数,比较最大次数max与楼梯的长度

var canJump = function(nums) {
    let max = nums[0];

    for (let i = 0; i < nums.length; i++) {
		if (max > nums.length) return true; // 比楼梯长度大,能够达到
		if (max < i) return false; // 最大跳跃没有到当前楼梯,无法达到
		max = Math.max(max, i + nums[i]); // 最大跳跃为 当前楼梯+该位置可以跳跃的最大次数
	}

	return true;
};

@Ray-56 Ray-56 changed the title 55. 跳跃游戏 ✅55. 跳跃游戏 Jun 12, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants