给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:
0 <= j <= nums[i]
i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/jump-game-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public int jump(int[] nums) { if (nums.length == 1) return 0; if (nums[0] >= nums.length - 1) return 1; //记录跳了几步 int res = 0, len = nums.length, temp = 0; //当前位置最大步长 int step = nums[0]; //当前位置的索引 int cur = 0; //走循环判断的起点索引,也就是上一个点的最大步长 //int index = 0; //下一轮起点 int next_start = cur + step; int i = 1; while (i <= step && cur < nums.length) { //如果当前起点加最大步长可达终点,直接跳过去 if (cur + step >= len - 1) { res++; break; } //每次一开始的时候记录一下最大步长的时候下一步能跳多远 if (i == 1) temp = nums[cur + step] + step; //找当前步长范围内覆盖的点中可以跳的更远的 if (temp <= nums[i + cur] + i) { temp = nums[i + cur] + i; next_start = i + cur; } i++; //循环至最大步长,下一步更新起点、最大步长等,进入下一轮判断,也就是跳到这个点 if (i > step){ res++; i = 1; cur = next_start; step = nums[cur]; } } return res; }
标签:cur,nums,int,res,45,步长,II,step,跳跃 From: https://www.cnblogs.com/RynerLee/p/17590756.html