public class Solution {
    public int jump(int[] A) {
        if (A == null)
            return -1;
        int len = A.length;
        if (len == 0)
            return -1;
        if (len == 1)
            return 0;
        int rightBound = A[0];
        int i = 0;
        int step = 1;
        while (true) {
            if (rightBound >= len - 1)
                return step;
            int newRightBound = rightBound;
            while (i <= rightBound) {
                if (i + A[i] >= newRightBound)
                    newRightBound = i + A[i];
                i++;
            }
            if (newRightBound == rightBound)
                break;
            rightBound = newRightBound;
            step++;
        }
        return -1;
    }
}