# Jump Game

> Given an array of non-negative integers, you are initially positioned at the first index of the array.

> Each element in the array represents your maximum jump length at that position.

> Determine if you are able to reach the last index.

> For example:
> A = [2,3,1,1,4], return true.

> A = [3,2,1,0,4], return false.

```c++
class Solution {
public:
bool canJump(int A[], int n) {
if(n == 0) {
return true;
}

int v = A[0];

for(int i = 1; i < n; i++) {
v--;
if(v < 0) {
return false;
}

if(v < A[i]) {
v = A[i];
}
}
return true;
}
};
```

# Jump Game II

> Given an array of non-negative integers, you are initially positioned at the first index of the array.

> Each element in the array represents your maximum jump length at that position.

> Your goal is to reach the last index in the minimum number of jumps.

> For example:
> Given array A = [2,3,1,1,4]

> The minimum number of jumps to reach the last index is 2. (Jump 1 step from index 0 to 1, then 3 steps to the last index.)

```c++
class Solution {
public:
int jump(int A[], int n) {
int step = 0;
int cur = 0;
int next = 0;

int i = 0;
while(i < n){
if(cur >= n - 1) {
break;
}

while(i <= cur) {
//更新最远达到点
next = max(next, A[i] + i);
i++;
}
step++;
cur = next;
}

return step;
}
};
```