• Source
    1. import java.util.*;
    2.  
    3. /**
    4.  * Given an jumpsay of integers where each element represents the max number of steps that can be made forward from that element.
    5.  * Write a function to return the minimum number of jumps to reach the end of the jumpsay (starting from the first element).
    6.  * If an element is 0, then cannot move through that element.
    7.  *
    8.  * Example:
    9.  * Input: jumps[] = {1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9}
    10.  * Output: 3 (1-> 3 -> 8 ->9)
    11.  *
    12.  * First element is 1, so can only go to 3. Second element is 3, so can make at most 3 steps eg to 5 or 8 or 9.
    13.  *
    14.  * If an element is 0, then cannot make any jumps
    15.  */
    16. class Ideone {
    17. private static final int MAX = 10000;
    18. public static void main(String[] args){
    19. int[] jumps = {1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9};
    20.  
    21. if(jumps[0] == 0){
    22. System.out.println("No jumps are allowed from the first step.");
    23. return;
    24. }
    25.  
    26. //To hold min number of jumps needed to reach that step from starting step
    27. int[] dp = new int[jumps.length];
    28.  
    29. for(int i=1; i<jumps.length; i++){
    30. dp[i] = MAX; //initialise min steps to MAX value
    31.  
    32. //Calculate min jumps need to reach ith Step
    33. for(int j=0; j<i; j++){
    34. if(j + jumps[j] >= i && dp[j] != MAX){
    35. dp[i] = dp[j]+1;
    36. break;
    37. }
    38. }
    39. }
    40.  
    41. System.out.println("Minimum number of jumps to reach other end => "+ dp[jumps.length-1]);
    42. }
    43. }
    44.