[2, 3, 1, 1, 4, 2, 1]为例
第一次:
2可以跳到[3, 1],最远下标为2,那么第二次起跳肯定在这两个数内;
[3, 1]都可以作为第二次起跳点,所以可以跳到[1, 4],最远下标为4,那么第三次起跳肯定在[1, 4]这两个数内;
[1,4]都可以作为第三次起跳点,所以可以调到[2, 1],最远下标为6,已经到终点了;
时间复杂度:
空间复杂度:

class Solution {
public:
    int Jump(int n, vector<int>& A) {
        // write code here
        int ans = 0;
        int maxDst = 0; //当前最大到达位置
        int preJump = 0; //上次最大到达位置
        for(int i = 0; i < n - 1; i ++){
            maxDst = max(maxDst, i + A[i]);
            if(i == preJump){
                preJump = maxDst;
                ans ++;
            }
        }
        return ans;
    }
};