题目:给定一个整型数组,每个值代表可以向前跳跃的步数的最大值,求跳跃到最后一位所需的最小的跳跃次数
思路:定义一个窗口,代表当前可以跳跃的范围,起始范围是【1,A[0]+1】,下一个范围的右边界为范围内可以跳跃到的最大值,这样直到某个范围覆盖到最后一位,范围迭代的次数即是最小跳跃次数
class Solution {
public:
int jump(int A[], int n) {
if(n<2)return 0;
int left=0,right=0,i=0,j=0;
left=1,right=A[0]+i;
int result=1;
while(right<n-1){
result++;
int temp;
temp=right;
for(i=left;i<=right;i++){
if((i+A[i])>=n-1)return result;
if((i+A[i])>temp)temp=i+A[i];
}
left=right+1;
right=temp;
}
return result;
}
};