> For the complete documentation index, see [llms.txt](https://mayanktyagi3111.gitbook.io/interview-prep/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mayanktyagi3111.gitbook.io/interview-prep/strings-arrays-and-2-pointers/array-3-pointers.md).

# Array 3 Pointers

You are given 3 arrays A, B and C. All 3 of the arrays are sorted.

Find `i, j, k` such that :\
`max(abs(A[i] - B[j]), abs(B[j] - C[k]), abs(C[k] - A[i]))` is minimized.\
Return the minimum `max(abs(A[i] - B[j]), abs(B[j] - C[k]), abs(C[k] - A[i]))`

\*\*abs(x) is absolute value of x and is implemented in the following manner : \*\*

```
      if (x < 0) return -x;
      else return x;
```

**Example :**

```
Input : 
        A : [1, 4, 10]
        B : [2, 15, 20]
        C : [10, 12]

Output : 5 
         With 10 from A, 15 from B and 10 from C. 
```

```java
public class Solution {
    public int minimize(final int[] A, final int[] B, final int[] C) {
        int i, j, k;
        i = A.length - 1;
        j = B.length - 1;
        k = C.length - 1;
        int min_diff, current_diff, max_term;
        min_diff = Math.max(Math.abs(A[i] - B[j]), Math.max(Math.abs(B[j] - C[k]), Math.abs(C[k] - A[i])));
        while (i >= 0 && j >= 0 && k >= 0) {
            current_diff = Math.max(Math.abs(A[i] - B[j]), Math.max(Math.abs(B[j] - C[k]), Math.abs(C[k] - A[i])));
            min_diff = Math.min(min_diff, current_diff);
            max_term = Math.max(A[i], Math.max(B[j], C[k]));
            if (A[i] == max_term)
                i--;
            else if (B[j] == max_term)
                j--;
            else
                k--;
        }
        return min_diff;
    }
}

```
