Questions: Given an array arr[], find the maximum j – i such that arr[j] > arr[i].
Examples:
Input: {34, 8, 10, 3, 2, 80, 30, 33, 1}
Output: 6 (j = 7, i = 1)
Input: {9, 2, 3, 4, 5, 6, 7, 8, 18, 0}
Output: 8 ( j = 8, i = 0)
Input: {1, 2, 3, 4, 5, 6}
Output: 5 (j = 5, i = 0)
Input: {6, 5, 4, 3, 2, 1}
Output: -1
Solution:
12345678910111213141516171819202122232425262728293031323334intmaxIndexDiff(intarr[],intn){intmaxDiff;inti, j;intLMin =newint[n];intRMax =newint[n];// Construct LMin[] such that LMin[i] stores the min value from (arr[0] .. arr[i])LMin[0] = arr[0];for(i =1; i < n; ++i)LMin[i] = min(arr[i], LMin[i-1]);// Construct RMax[] such that RMax[j] stores the max value from (arr[j]..arr[n-1])RMax[n-1] = arr[n-1];for(j = n-2; j >=0; --j)RMax[j] = max(arr[j], RMax[j+1]);// Traverse both arrays from left to right to find optimum j - i// This process is similar to merge() of MergeSorti =0, j =0, maxDiff = -1;while(j < n && i < n){if(LMin[i] < RMax[j]){maxDiff = max(maxDiff, j-i);j = j +1;}elsei = i+1;}returnmaxDiff;}
No comments:
Post a Comment