力扣 0055 - 跳跃游戏Ⅰ

题目详情:跳跃游戏Ⅰ

说好每日一拱的算法练习,因为某些原因断了好多天。

1. 思路

利用动态规划的思想,要到达目的地 i,只要前一个格子 i-1 的步数大于 0,如果不巧 i-1 的格子正好是 0, 那就要看 i-2 能不能达到 i,以此类推。

然后每当一个格子 x 可以被前面某个格子 y 到达,则目的地格子就变成了 y

2. 代码

JavaScript

var canJump = function (nums) {
  if (nums.length === 0) return false
  if (nums[0] === 0) {
    return nums.length === 1
  }

  let gap = 0
  for (let i = nums.length - 2; i > 0; i--) {
    if (nums[i] > gap) {
      gap = 0 // 跨度能够到达,改变目的地格子
    } else {
      gap += 1 // 跨度不能到达,下面一个格子需要更大的跨度
    }
  }
  return nums[0] > gap
};

3. 提交记录(仅供参考)

这道中等难度的算法题是我一次性写出来的,而且结果还不错,简直把我自己都惊呆了。难道真的是因为之前断了几次,养足了智商?

JavaScript

  • 执行时间:60ms(打败了 94.16%)
  • 内存消耗:35.6MB(打败了 100%)

你可能感兴趣的:(日拱一算法,算法,leetcode)