题目:
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
class Solution {
public:
bool canJump(vector<int>& nums)
{
// 贪心,每一次都 jump 最大值,如果最终结果覆盖了最后一个下标,
// 那么中间不管,但最终肯定有一种方案,可以保证能跳到最后一个下标,否则就是true
// int index = 0;
// while(index < nums.size())
// {
// index += nums[index];
// if(index >= index)
// {
// return true;
// }
// }
int cover = 0;
if(nums.size() == 1)
{
// 只有一个元素,那肯定可以的
return true;
}
// 注意 cover 是一个不断更新的过程,取得就是最大的覆盖范围
for(int i = 0; i <= cover; i++)
{
// cover = max(i + nums[i], cover);
cover = max(i + nums[i], cover);
// 今天又是一个 微妙的 bug ,竟然在 if 后面多写一个分号,艾玛,就气我昂~看我今天又困~又累~
if(cover >= nums.size() -1)
{
return true;
}
}
return false;
}
};