public boolean canJump(int[] steps) {
        if (steps == null || steps.length == 0) {
            return false;
        }
        if (steps.length == 1) {
            return true;
        }

        int maxReach = 0;

        for (int i = 0; i < steps.length; i ++) {
            if (i > maxReach) {
                return false;
            }

            int canReach = i + steps[i];

            if (canReach >= steps.length - 1) {
                return true;
            }

            if (canReach > maxReach) {
                maxReach = canReach;
            }
        }

        return false;
    }