It's an O(n) BFS, computing the range `[near, far)`

which could be reached in `step`

steps.

```
class Solution(object):
def jump(self, nums):
near, far, step = 0, 1, 0
while far < len(nums):
nfar = max( i + j for i, j in zip( range(near, far), nums[near:far] ) ) + 1
near, far, step = far, nfar, step + 1
return step
```