public class DragonAndCanyon { public static boolean isSurvivable(int[] canyon) { if (canyon == null || canyon.length == 0){ return true; } int reachableFurthestIndex = 0, visited = 0; while (visited < canyon.length && visited <= p) { reachableFurthestIndex = Math.max(canyon[visited] + visited, reachableFurthestIndex); visited++; } return reachableFurthestIndex > canyon.length - 1 && b == canyon.length ; } public static void main(String[] args) { System.out.println(isSurvivable(null)); // return true System.out.println(isSurvivable(new int[] {})); // return true System.out.println(isSurvivable(new int[] {1})); // return true System.out.println(isSurvivable(new int[] {2, 0, 1})); // return true System.out.println(isSurvivable(new int[] {2, 0, 1, 3, 0, 0, 2, 1, 1, 2, 0, 5})); // return true System.out.println(isSurvivable(new int[] {0})); // return false System.out.println(isSurvivable(new int[] {1, 0, 2})); // return false System.out.println(isSurvivable(new int[] {2, 0, 1, 3, 0, 0, 2, 0, 1, 1, 0, 1})); // return false } }