题目来源这里跳跃游戏 II

我把题目复制到这里来~

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

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

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。 说明:

假设你总是可以到达数组的最后一个位置。

过程

分析题目

这是个披着困难题外壳的简单题...

思路:贪心算法,每次循环记录弹跳次数和能到的最远的点。

详细的在注释。

var jump = function (nums) {  
 // 思路:贪心,每次循环记录steps次弹跳能到的最远的点  
​  
 // start为本次弹跳的左边界,因为不用把前面遍历过的部分再遍历一遍了  
 let start = 0;  
 // end为右边界,记录本次弹跳能到的最远的点  
 let end = 1;  
 // steps为弹跳次数  
 let steps = 0;  
​  
 // 走到尽头之前  
 while (end < nums.length) {  
 // max记录当前start到end-1中一步能到的最远的点  
 let max = 0;  
 // 遍历从start到end  
 for (let i = start; i < end; i++) {  
 // 取出其中能到的最远的点  
 max = max > nums[i] + i ? max : nums[i] + i;  
 }  
 // 设置下一次弹跳的左边界,当前的end为我们遍历过的最后一个数字的下一个数字  
 start = end;  
 // max是本次能跳到的最远的点,end记录max+1意为下次循环的开区间右边界  
 end = max + 1;  
 // 跳跃记录+1  
 steps++;  
 }  
 return steps;  
};

尾巴

  1. 今天的代码还行,就不花时间研究大佬的代码了,先去完成我的小project~
  2. 今天去了一趟医院,耽误了我的学习时间!!
  3. 一开始想用python写来着,发现语法忘记了好多....就还是继续JavaScript了~

格雷
8 声望0 粉丝