// class Solution {
//     maxIndexDiff(arr, n) {
//         if (n === 1) {
//             return 0;
//         }
//         let maxDiff = 0;
//         let i = 0, j = 0;
//         let LMin = new Array(n);
//         let RMax = new Array(n);
    
//         LMin[0] = arr[0];
//         for (i = 1; i < n; i++) {
//             LMin[i] = Math.min(arr[i], LMin[i - 1]);
//         }
    
//         RMax[n - 1] = arr[n - 1];
//         for (j = n - 2; j >= 0; j--) {
//             RMax[j] = Math.max(arr[j], RMax[j + 1]);
//         }
    
//         while (i < n && j < n) {
//             if (LMin[i] <= RMax[j]) {
//                 maxDiff = Math.max(maxDiff, j - i);
//                 j = j + 1;
//             } else {
//                 i = i + 1;
//             }
//             if (i === j && i !== n - 1) {
//                 i = i + 1;
//                 j = j + 1;
//             }
//             if (i === n - 1 && j === n - 1) {
//                 break;
//             }
//         }
    
//         return maxDiff;
//     }
// }


class Solution {
    maxIndexDiff(arr) {
        let n = arr.length;
        if (n === 1) {
            return 0;
        }
        let maxDiff = -1;
        let LMin = new Array(n);
        let RMax = new Array(n);

        LMin[0] = arr[0];
        for (let i = 1; i < n; ++i) {
            LMin[i] = Math.min(arr[i], LMin[i - 1]);
        }

        RMax[n - 1] = arr[n - 1];
        for (let j = n - 2; j >= 0; --j) {
            RMax[j] = Math.max(arr[j], RMax[j + 1]);
        }

        let i = 0, j = 0;
        while (i < n && j < n) {
            if (LMin[i] <= RMax[j]) {
                maxDiff = Math.max(maxDiff, j - i);
                j++;
            } else {
                i++;
            }
        }

        return maxDiff;
    }
}

let sol = new Solution()
let ans = sol.maxIndexDiff([1, 10])
console.log(ans)





Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: