#include <stdio.h>
int max(int x, int y) { return (x > y)? x: y; }
int minJumps(int arr[], int n)
{ if (n <= 1)
return 0;
if (arr[0] == 0)
return -1;
int maxReach = arr[0], step = arr[0], 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;
}
int main()
{ int arr[]={1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9};
int size = sizeof(arr)/sizeof(int);
printf("Minimum number of jumps to reach end is %d ", minJumps
(arr
,size
)); return 0; }
I2luY2x1ZGUgPHN0ZGlvLmg+IAppbnQgbWF4KGludCB4LCBpbnQgeSkgeyByZXR1cm4gKHggPiB5KT8geDogeTsgfSAKaW50IG1pbkp1bXBzKGludCBhcnJbXSwgaW50IG4pIAp7IAlpZiAobiA8PSAxKSAKCQlyZXR1cm4gMDsgCglpZiAoYXJyWzBdID09IDApIAoJCXJldHVybiAtMTsgCglpbnQgbWF4UmVhY2ggPSBhcnJbMF0sIHN0ZXAgPSBhcnJbMF0sIGp1bXAgPTEsIGk9MTsgCglmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKSAKCXsJCWlmIChpID09IG4tMSkgCgkJCXJldHVybiBqdW1wOyAKCQltYXhSZWFjaCA9IG1heChtYXhSZWFjaCwgaSthcnJbaV0pOyBzdGVwLS07IAoJCWlmIChzdGVwID09IDApIAoJCXsganVtcCsrOyAKCQkJaWYoaSA+PSBtYXhSZWFjaCkgCgkJCQlyZXR1cm4gLTE7IAoJCQlzdGVwID0gbWF4UmVhY2ggLSBpOyAKCQl9IAoJfSAKCXJldHVybiAtMTsgCn0gCmludCBtYWluKCkgCnsgCWludCBhcnJbXT17MSwgMywgNSwgOCwgOSwgMiwgNiwgNywgNiwgOCwgOX07IAoJaW50IHNpemUgPSBzaXplb2YoYXJyKS9zaXplb2YoaW50KTsgCglwcmludGYoIk1pbmltdW0gbnVtYmVyIG9mIGp1bXBzIHRvIHJlYWNoIGVuZCBpcyAlZCAiLCBtaW5KdW1wcyhhcnIsc2l6ZSkpOyAKCXJldHVybiAwOyB9IAoK