1.跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置
数组中的每个元素代表你在该位置可以跳跃的最大长度
判断你是否能够到达最后一个位置
思路
从数组的倒数第二个元素看起,每次往前遍历,如果当前元素能够到达最后一个位置,那么就把当前位置开始到最后全部“切断”,以当前元素为最后一个元素,重复第一次的过程,如果遍历到数组的第一个元素,则返回true。
bool canJump(vector<int>& nums) {
int len = nums.size();
int cur = len - 1;
for(int i = len - 2; i >= 0; i--)
{
if(nums[i] >= cur - i)
{
cur = i;
}
}
return cur == 0;
}
贪心算法:记录每一步可走的最远长度,如果能到达最后则返回true
bool canJump(vector<int>& nums) {
int maxsize = 1;
for(int i = 0; i < nums.size() && maxsize > 0; i++)
{
maxsize = max(maxsize - 1, nums[i]);
if(i + maxsize >= nums.size() - 1)
{
return true;
}
}
return false;
}