这题也是用贪心的思路。
new_end变量始终维护当前最远可达路径。 初始step=1,遍历数组A,如果在last_end范围内,则继续,否则step+1,并更新last_end为new_end。继续。
语言描述略麻烦,代码很短,不如读代码。。。
class Solution {
public:
int jump(int A[], int n) {
if(n==1)
return 0;
int last_end = A[0], step=1, new_end = last_end;
for(int i=0;i<n;++i){
if(i<=last_end)
;
else if(i<=new_end){
last_end = new_end;
++step;
}
else
return 0;
new_end = max(new_end,i+A[i]);
}
return step;
}
};