跳跃游戏 II
题目链接:跳跃游戏 II
给定一个长度为 n 的 0 索引整数数组 nums。初始位置在下标 0。
每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在索引 i 处,你可以跳转到任意 (i + j) 处:
- 0 <= j <= nums[i] 且
- i + j < n
返回到达 n - 1 的最小跳跃次数。测试用例保证可以到达 n - 1。
方法一:贪心+暴力?
class Solution {
public:
int jump(vector<int>& nums) {
int ans[20010];
for (int i = 0;i < nums.size();i++) {
ans[i] = INT_MAX;
}
ans[0] = 0;
for (int i = 0;i < nums.size();i++) {
for (int j = 1;j <= nums[i];j++) {
ans[i+j] = min(ans[i+j],ans[i] + 1);
}
}
return ans[nums.size()-1];
}
};方法二:顺藤摸瓜
class Solution {
public:
int jump(vector<int>& nums) {
int end = 0;
int maxPos = 0;
int ans = 0;
for (int i = 0;i < nums.size() - 1;i++) {
maxPos = max(maxPos,nums[i] + i);
if (i == end) {
end = maxPos;
ans ++;
}
}
return ans;
}
};