Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
贪心法,一直往前走,当找到比之前能走的更远的位置max_pos 则更新即可。最后判断max_pos是否能覆盖n-1
bool jump_game(int *a,int n)
{
if (a == NULL || n <= 0)
{
return false;
}
int max_pos = 0;
for (int i = 0;i <= max_pos && i < n;i++)
{
if (max_pos < a[i] + i)
{
max_pos = a[i] + i;
}
}
//cout<<max_pos<<endl;
return max_pos >= n-1;
}
第二次;
跟上面类似,贪心,只是此处用的是步数,略微麻烦。一直往前走,每次更新当前的步数(1、走一步减去一步。2、比之前大跟新.)(下一步开始)
bool jump_game_2(int *a,int n)
{
if (a == NULL || n <= 0)
{
return false;
}
int max_step = a[0];//以当前最大步数决定!
for (int i = 1; i < n ;i++)
{
if (max_step > 0)//下一个开始减
{
max_step -- ;
if (max_step < a[i])
{
max_step = a[i] ;
}
}
else
{
return false;
}
}
return true;
}
贪心法。