1.跳跃游戏
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。
考察知识点:贪心算法
解题思路:
(1)如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。
(2)可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。
(3)如果可以一直跳到最后,就成功了.
bool canJump(vector<int>& nums)
{
int maxpos=0,end=0;
for(int i=0;i<nums.size()-1;++i)
{
maxpos=max(maxpos,i+nums[i]);
if(i==end)
end=maxpos;
}
return end>=nums.size()-1;
}
2.跳跃游戏 II
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。
考察知识点:贪心算法
class Solution {
public:
int jump(vector<int>& nums) {
int maxpos=0,end=0,step=0;
for(int i=0;i<nums.size()-1;++i)
{
maxpos=max(maxpos,i+nums[i]);
if(i==end)
{
end=maxpos;
++step;
}
}
return step;
}
};