-
Notifications
You must be signed in to change notification settings - Fork 522
/
Copy pathMinimum number of jumps.cpp
60 lines (53 loc) · 1.41 KB
/
Minimum number of jumps.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
Minimum number of jumps
=======================
Given an array of integers where each element represents the max number of steps that can be made forward from that element. Find the minimum number of jumps to reach the end of the array (starting from the first element). If an element is 0, then you cannot move through that element.
Example 1:
Input:
N=11
arr=1 3 5 8 9 2 6 7 6 8 9
Output: 3
Explanation:
First jump from 1st element to 2nd
element with value 3. Now, from here
we jump to 5th element with value 9,
and from here we will jump to last.
Example 2:
Input :
N= 6
arr= 1 4 3 2 6 7
Output: 2
Explanation:
First we jump from the 1st to 2nd element
and then jump to the last element.
Your task:
You don't need to read input or print anything. Your task is to complete function minJumps() which takes the array arr and it's size N as input parameters and returns the minimum number of jumps.
Constraints:
1 ≤ N ≤ 107
0 <= ai <= 107
*/
// Function to return minimum number of jumps to end of array
int minJumps(int arr[], int n)
{
if (n <= 1)
return 0;
if (arr[0] == 0)
return -1;
int maxReach = arr[0], step = arr[0];
int jump = 1, i = 1;
for (i = 1; i < n; ++i)
{
if (i == n - 1)
return jump;
maxReach = max(maxReach, i + arr[i]);
step--;
if (step == 0)
{
jump++;
if (i >= maxReach)
return -1;
step = maxReach - i;
}
}
return -1;
}