题目来源这里跳跃游戏 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;
};
尾巴
- 今天的代码还行,就不花时间研究大佬的代码了,先去完成我的小project~
- 今天去了一趟医院,耽误了我的学习时间!!
- 一开始想用python写来着,发现语法忘记了好多....就还是继续JavaScript了~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。