[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; } };