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;
}
};
本文探讨了两种跳跃游戏问题:一是判断能否通过最大跳跃距离到达终点,二是寻找到达终点的最少跳跃次数。通过贪心策略和遍历分析,展示了如何用C++代码解决。涉及的知识点包括数组操作、贪心算法应用和动态规划思想。
851

被折叠的 条评论
为什么被折叠?



