/* Time complexity: O(N ^ 2) Space complexity: O(1)
Where 'N' represents the size of given array. */
#include<climits>
int findGreater(vector<int> &arr, int value, int from, int to) { int min = INT_MAX; int minIndex = -1;
for (int i = from; i < to; i++) { if (arr[i] == value) { return i; }
if (arr[i] > value && min > arr[i]) { min = arr[i]; minIndex = i; } }
return minIndex; }
int findSmaller(vector<int> &arr, int value, int from, int to) { int max = INT_MIN; int maxIndex = -1;
for (int i = from; i < to; i++) { if (arr[i] == value) { return i; }
if (arr[i] < value && max < arr[i]) { max = arr[i]; maxIndex = i; } }
return maxIndex; }
int ninjaJump(vector<int> &arr, int n) { if (n < 1) { return 0; }
int ans = 0;
for (int i = 0; i < n; i++) { // If we reached the end we exit from the loop. if (i == n - 1) { ans++; break; }
int value = arr[i]; int index = i;
while (index < n) { value = arr[index]; // We are calling this function to find greater element index. index = findGreater(arr, value, index + 1, n);
if (index == n - 1) { ans++; break; } else if (index == -1) { break; }
value = arr[index]; // We are calling this function to find smaller element index. index = findSmaller(arr, value, index + 1, n);
if (index == n - 1) { ans++; break; } else if (index == -1) { break; } } } return ans; }