题目:
分析:
优化的方法:当从j跳到i,A【i】<A【j】-(j-i) 则不用再跳了。
不对,可能i位置的值比j位置的要小。
是对的,因为能跳到之后的,那它前面的也一定可以跳到的。
老老实实逐个跳吧。
代码1:暴力无优化
会有一个样例不通过。
long long A[nums.size()];
for(int i=0;i<nums.size();i++) A[i]=1<<30;
A[0]=0;
for(int i=0;i<nums.size()-1;i++)
for(int j=1;j<=nums[i];j++)
{
if(i+j<nums.size())
A[i+j]=min(A[i+j],A[i]+1);
else continue;
}
return A[nums.size()-1];
代码2:自己想的根据第i跳可以达到的最远的距离
根据第一跳算的可以跳到(2,x),则根据(2,x)计算第二跳可以到达的最远距离(x+1,y),再根据(x+1,y)计算第三跳可以到达的最远距离(y+1,z)。。。。。直到(I,j) : 目的点在其中。
不错,看来自己潜力无限,哈哈哈
int start=0,end=0;
int step=0;
while(1)
{
int maxx=-1;
for(int i=start;i<=end;i++)
{
maxx=max(maxx,nums[i]+i);
}
step++;
start=end+1;
end=maxx;
if(nums.size()-1<=end && nums.size()-1>=start) return step;
}