给定一个长度为 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]。
> 我的解法
class Solution {
public:
int jump(vector<int>& nums) {
int n = nums.size();
if(n == 1) return 0;
vector<int> path(n,1000);
int cover = nums[0];
int jump_index = 1;
int res = 0;
path[0] = 0;
for(int i = 0;i <= cover;i++){
cover = max(i+nums[i],cover);
if(cover >= n-1) {
res = i;
break;
}
for(int j = i + 1;j <= cover;j++){
if(path[j] == 1000){
path[j] = path[i] + 1;
}
}
}
return path[res] + 1;
}
};
> 标准解法
class Solution {
public:
int jump(vector<int>& nums) {
int curDistance = 0; // 当前覆盖的最远距离下标
int ans = 0; // 记录走的最大步数
int nextDistance = 0; // 下一步覆盖的最远距离下标
for (int i = 0; i < nums.size() - 1; i++) { // 注意这里是小于nums.size() - 1,这是关键所在
nextDistance = max(nums[i] + i, nextDistance); // 更新下一步覆盖的最远距离下标
if (i == curDistance) { // 遇到当前覆盖的最远距离下标
curDistance = nextDistance; // 更新当前覆盖的最远距离下标
ans++;
}
}
return ans;
}
};
标签:jump,远距离,下标,nextDistance,nums,int,45,II,跳跃
From: https://www.cnblogs.com/lihaoxiang/p/17361097.html