public class Solution { // DO NOT MODIFY THE LIST. IT IS READ ONLY public int maximumGap(final List<Integer> A) { // 3 5 4 2 // [3 3 3 2] - min // [5 5 4 2] - max int[] minArr = new int[A.size()]; int[] maxArr = new int[A.size()]; minArr[0] = A.get(0); maxArr[A.size() - 1] = A.get(A.size() - 1); for (int i = 1; i < A.size(); i ++) { minArr[i] = Math.min(A.get(i), minArr[i - 1]); } for (int i = A.size() - 2; i >= 0; i --) { maxArr[i] = Math.max(A.get(i), maxArr[i + 1]); } int i = 0, j = 0, maxGap = -1; while (i < A.size() && j < A.size()) { if (minArr[i] <= maxArr[j]) { maxGap = Math.max(maxGap, j - i); j ++; } else { i ++; } } return maxGap; } }