难度:4
好题。。动态规划O(n^2)会超时,必须O(n)
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.
Your goal is to reach the last index in the minimum number of jumps.
For example:
Given array A = [2,3,1,1,4]
The minimum number of jumps to reach the last index is 2
. (Jump 1
step from index 0 to 1, then 3
steps to the last index.)
遍历A数组
设当前索引为i,则从i位置能到达的位置为[i+1,i+A[i]]闭区间
记i的下一跳的位置为i+A[i](最优方案可能不是它,但是取它来代表这个区间)
那么记i+A[i]下一跳为max(i+1+A[i+1],,,,,,i+A[i]+A[i+A[i]])=k
当下一跳到达终点时结束
想了好久才想通的
class Solution
{
public:
int jump(int A[], int n)
{
if(n<=1) return 0;
int cur,next,ans;
cur=0;
next=A[0];
ans=0;
for(int i=1;i<n;i++)
{
if(i>cur)
{
cur=next;
ans++;
}
next=max(next,i+A[i]);
}
return ans;
}
};