贪心和Jump Game挺像的
时间O(n),额外空间O(1)
cur为当前位置,far为目前能跳到的最远位置
由于每一次的cur是根据上一次的far中选出来的,所以cur一定是之前情况的最优解
从cur+1到cur+nums[cur]中选择一个i使i+nums[i]最大,则i即为当前情况的最优解
cur更新为i,不断迭代,当cur+nums[cur]>=n-1时候,则为倒数的一步,res+1即为答案
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size()==1) return 0;
int res = 0;
int cur = 0, n = nums.size(), far = nums[cur];
while((cur+nums[cur])<n-1){
int temMax = far;
for(int i=cur+1;i<=temMax;i++){
if((i+nums[i])>far){
far = i+nums[i];
cur = i;
}
}
res++;
}
return res+1;
}
};