思路:贪心
例如,对于数组 [2,3,1,2,4,2,3],初始位置是下标 0,从下标 0 出发,最远可到达下标 2。下标 0 可到达的位置中,下标 1 的值是 3,从下标 1 出发可以达到更远的位置,因此第一步到达下标 1。
从下标 1 出发,最远可到达下标 4。下标 1 可到达的位置中,下标 4 的值是 4 ,从下标 4 出发可以达到更远的位置,因此第二步到达下标 4。
var jump = function(nums) {
//特殊情况,只有一个元素就已经到尾巴了,不用跳
if(nums.length == 1)return 0;
//遍历i
let i = 0;
//初始化步数为1
let res = 1;
while(i < nums.length){
//在第i个元素时可以直接跳到数组的尾巴
if(i + nums[i] >= nums.length - 1)return res;
//不可以直接跳到就步数 + 1
res++;
//找到下一步跳到next(在i 到 i + nums【i】之间)能够使跨度最大
let tmp = i + nums[i];
let next = 0;
for(let j = i; j <= i + nums[i]; j++){
if(tmp < j + nums[j]){
tmp = j + nums[j];
next = j;
}
}
//更新i
i = next;
}
return res;
};