给出一个非负整数数组,你最初定位在数组的第一个位置。
数组中的每个元素代表你在那个位置可以跳跃的最大长度。
判断你是否能到达数组的最后一个位置。
样例
样例 1
输入 : [2,3,1,1,4]
输出 : true
样例 2
输入 : [3,2,1,0,4]
输出 : false
两种解法
第一种-动态规划 (较差)
class Solution {
public:
/**
* @param A: A list of integers
* @return: A boolean
*/
bool canJump(vector<int> &A) {
// write your code here
int f[5005];
int n = A.size();
for(int i = 1;i < n;i++)
f[i] = 0;
f[0] = 1;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < i;j++)
{
if(f[j] == 1 && A[j] >= i - j)
{
f[i] = 1;
break;
}
}
}
return f[n - 1];
}
};
第二种-贪心 (最优解法)
class Solution {
public:
/**
* @param A: A list of integers
* @return: A boolean
*/
bool canJump(vector<int> &A) {
// write your code here
int n = A.size();
int mx = 0;
for(int i = 0;i < n;i++)
{
if(mx < i)
return false;
mx = max(mx, A[i] + i);
}
return true;
}
};