参考解法:
变量currange记录当前轮次的可达范围(边界),变量maxrrange记录当前轮次内可达的下一轮最大范围;
当i取到currange时,代表已到达当前轮次的边界,即当前轮次结束,再走一步开始新一轮。
(for循环从0到n,因为题目保证了nums[n-1]是可达的)
class Solution{
public:
int jump(vector<int>& nums){
int n = nums.size();
if(n == 1) return 0;
int step = 0;
int currange = 0,maxrange = 0; // 注意各变量的初始值
for(int i = 0; i < n; ++i){
maxrange = max(maxrange, i + nums[i]);
if(i == currange){
step++;
currange = maxrange;
if(maxrange >= n - 1){
break;
}
}
}
return step;
}
};