This set of Data Structure Multiple Choice Questions & Answers (MCQs) focuses on “Minimum Number of Jumps”.

1. You are given an array of elements where each array element represents the MAXIMUM number of jumps that can be made in the forward direction from that element. You have to find the minimum number of jumps that are required to reach the end of the array. Which of these methods can be used to solve the problem?

a) Dynamic Programming

b) Greedy Algorithm

c) Recursion

d) All of the mentioned

View Answer

Explanation: Both recursion and dynamic programming can be used to solve minimum number of jumps problem.

2. Consider the following array:

{1, 3, 5, 8, 9, 2, 6, 7, 6}

What is the minimum number of jumps required to reach the end of the array?

a) 1

b) 2

c) 3

d) 4

View Answer

Explanation: The jumps made will be:{1 -> 2 -> 4 -> 9}. So, the number of jumps is three.

3. Consider the following recursive implementation:

#include<stdio.h> #include<limits.h> int min_jumps(int *arr, int strt, int end) { int idx; if(strt == end) return 0; if(arr[strt] == 0) // jump cannot be made return INT_MAX; int min = INT_MAX; for(idx = 1; idx <= arr[strt] && strt + idx <= end; idx++) { int jumps = min_jumps(____,____,____) + 1; if(jumps < min) min = jumps; } return min; } int main() { int arr[] ={1, 3, 5, 8, 9, 2, 6, 7, 6},len = 9; int ans = min_jumps(arr, 0, len-1); printf("%d\n",ans); return 0; }

Which of these arguments should be passed by the min_jumps function represented by the blanks?

a) arr, strt + idx, end

b) arr + idx, strt, end

c) arr, strt, end

d) arr, strt, end + idx

View Answer

Explanation: arr, strt + idx, end should be passed as arguments.

4. For a given array, there can be multiple ways to reach the end of the array using minimum number of jumps.

a) True

b) False

View Answer

Explanation: Consider the array {1,2,3,4,5}. It is possible to reach the end in the following ways: {1 -> 2 -> 3 -> 5} or {1 -> 2 -> 4 -> 5}.

In both the cases the number of jumps is 3, which is minimum. Hence, it is possible to reach the end of the array in multiple ways using minimum number of jumps.

5. What is the output of the following program?

#include<stdio.h> #include<limits.h> int min_jumps(int *arr, int strt, int end) { int idx; if(strt == end) return 0; if(arr[strt] == 0) // jump cannot be made return INT_MAX; int min = INT_MAX; for(idx = 1; idx <= arr[strt] && strt + idx <= end; idx++) { int jumps = min_jumps(arr, strt + idx, end) + 1; if(jumps < min) min = jumps; } return min; } int main() { int arr[] ={1, 2, 3, 4, 5, 4, 3, 2, 1},len = 9; int ans = min_jumps(arr, 0, len-1); printf("%d\n",ans); return 0; }

a) 4

b) 5

c) 6

d) 7

View Answer

Explanation: The program prints the minimum number of jumps required to reach the end of the array. One way reach the end using minimum number of jumps is

{1 -> 2 -> 4 -> 8 -> 9}. So, the number of jumps is 4.

6. For any array, given that at most one element is non-zero, it is ALWAYS possible to reach the end of the array using minimum jumps.

a) True

b) False

View Answer

Explanation: Consider the array {1,0,2,3,4}.

In this case, only one element is 0 but it is not possible to reach the end of the array.

7. Consider the following dynamic programming implementation of the minimum jumps problem:

#include<stdio.h> #include<limits.h> int min_jump(int *arr, int len) { int j, idx, jumps[len]; jumps[len - 1] = 0; for(idx = len - 2; idx >= 0; idx--) { int tmp_min = INT_MAX; for(j = 1; j <= arr[idx] && idx + j < len; j++) { if(jumps[idx + j] + 1 < tmp_min) tmp_min = jumps[idx + j] + 1; } jumps[idx] = tmp_min; } return jumps[0]; } int main() { int arr[] ={1, 1, 1, 1, 1, 1, 1, 1, 1},len = 9; int ans = min_jump(arr,len); printf("%d\n",ans); return 0; }

Which of the following “for” loops can be used instead of the inner for loop so that the output doesn’t change?

a) for(j = 1; j < arr[idx] + len; j++)

b) for(j = 0; j < arr[idx] – len; j++)

c) for(j = idx + 1; j < len && j <= arr[idx] + idx; j++)

d) None of the mentioned

View Answer

Explanation: None of the above mentioned “for” loops can be used instead of the inner for loop. Note, for(j = idx + 1; j < len && j <= arr[idx] + idx; j++) covers the same range as the inner for loop but it produces the wrong output because the indexing inside the loops changes as “j” takes different values in the two “for” loops.

8. What is the time complexity of the ABOVE dynamic programming implementation used to find the minimum number of jumps?

a) O(1)

b) O(n)

c) O(n^{2})

d) None of the mentioned

View Answer

Explanation: The time complexity of the above dynamic programming implementation is O(n

^{2}).

9. What is the space complexity of the ABOVE dynamic programming implementation used to find the minimum number of jumps?

a) O(1)

b) O(n)

c) O(n^{2})

d) None of the mentioned

View Answer

Explanation: The space complexity of the above dynamic programming implementation is O(n).

10. What is the output of the following program?

#include<stdio.h> #include<limits.h> int min_jump(int *arr, int len) { int j, idx, jumps[len]; jumps[len - 1] = 0; for(idx = len - 2; idx >= 0; idx--) { int tmp_min = INT_MAX; for(j = 1; j <= arr[idx] && idx + j < len; j++) { if(jumps[idx + j] + 1 < tmp_min) tmp_min = jumps[idx + j] + 1; } jumps[idx] = tmp_min; } return jumps[0]; } int main() { int arr[] ={1, 1, 1, 1, 1, 1, 1, 1, 1},len = 9; int ans = min_jump(arr,len); printf("%d\n",ans); return 0; }

a) 7

b) 8

c) 9

d) 10

View Answer

Explanation: The program prints the minimum jumps required to reach the end of the array, which is 8 and so the output is 8.

11. What is the output of the following program?

#include<stdio.h> #include<limits.h> int min_jump(int *arr, int len) { int j, idx, jumps[len]; jumps[len - 1] = 0; for(idx = len - 2; idx >= 0; idx--) { int tmp_min = INT_MAX; for(j = 1; j <= arr[idx] && idx + j < len; j++) { if(jumps[idx + j] + 1 < tmp_min) tmp_min = jumps[idx + j] + 1; } jumps[idx] = tmp_min; } return jumps[0]; } int main() { int arr[] ={9, 9, 9, 9, 9, 9, 9, 9, 9},len = 9; int ans = min_jump(arr,len); printf("%d\n",ans); return 0; }

a) 1

b) 6

c) 2

d) 7

View Answer

Explanation: The program prints the minimum jumps required to reach the end of the array, which is 1 and so the output is 1.

**Sanfoundry Global Education & Learning Series – Data Structure.**

To practice all areas of Data Structure, __here is complete set of 1000+ Multiple Choice Questions and Answers__.