# Minimum Possible value of |ai + aj – k| for given array and k.

• Difficulty Level : Medium
• Last Updated : 29 Apr, 2021

You are given an array of n integer and an integer K. Find the number of total unordered pairs {i, j} such that absolute value of (ai + aj – K), i.e., |ai + aj – k| is minimal possible where i != j.
Examples:

```Input : arr[] = {0, 4, 6, 2, 4},
K = 7
Output : Minimal Value = 1
Total  Pairs = 5
Explanation : Pairs resulting minimal value are :
{a1, a3}, {a2, a4}, {a2, a5}, {a3, a4}, {a4, a5}

Input : arr[] = {4, 6, 2, 4}  , K = 9
Output : Minimal Value = 1
Total Pairs = 4
Explanation : Pairs resulting minimal value are :
{a1, a2}, {a1, a4}, {a2, a3}, {a2, a4} ```

A simple solution is iterate over all possible pairs and for each pair we will check whether the value of (ai + aj – K) is smaller then our current smallest value of not. So as per result of above condition we have total of three cases :

1. abs( ai + aj – K) > smallest : do nothing as this pair will not count in minimal possible value.
2. abs(ai + aj – K) = smallest : increment the count of pair resulting minimal possible value.
3. abs( ai + aj – K) < smallest : update the smallest value and set count to 1.

## C++

 `// CPP program to find number of pairs  and minimal``// possible value``#include``using` `namespace` `std;` `// function for finding pairs and min value``void` `pairs(``int` `arr[], ``int` `n, ``int` `k)``{``    ``// initialize smallest and count``    ``int` `smallest = INT_MAX;``    ``int` `count=0;` `    ``// iterate over all pairs``    ``for` `(``int` `i=0; i

## Java

 `// Java program to find number of pairs``// and minimal possible value``import` `java.util.*;` `class` `GFG {``    ` `    ``// function for finding pairs and min value``    ``static` `void` `pairs(``int` `arr[], ``int` `n, ``int` `k)``    ``{``        ``// initialize smallest and count``        ``int` `smallest = Integer.MAX_VALUE;``        ``int` `count=``0``;``     ` `        ``// iterate over all pairs``        ``for` `(``int` `i=``0``; i

## Python3

 `# Python3 program to find number of pairs``# and minimal possible value` `# function for finding pairs and min value``def` `pairs(arr, n, k):``    ` `    ``# initialize smallest and count``    ``smallest ``=` `999999999999``    ``count ``=` `0` `    ``# iterate over all pairs``    ``for` `i ``in` `range``(n):``        ``for` `j ``in` `range``(i ``+` `1``, n):``            ` `            ``# is abs value is smaller than smallest``            ``# update smallest and reset count to 1``            ``if` `abs``(arr[i] ``+` `arr[j] ``-` `k) < smallest:``                ``smallest ``=` `abs``(arr[i] ``+` `arr[j] ``-` `k)``                ``count ``=` `1` `            ``# if abs value is equal to smallest``            ``# increment count value``            ``elif` `abs``(arr[i] ``+` `arr[j] ``-` `k) ``=``=` `smallest:``                ``count ``+``=` `1` `    ``# print result``    ``print``(``"Minimal Value = "``, smallest)``    ``print``(``"Total Pairs = "``, count)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``arr ``=` `[``3``, ``5``, ``7``, ``5``, ``1``, ``9``, ``9``]``    ``k ``=` `12``    ``n ``=` `len``(arr)``    ``pairs(arr, n, k)``    ` `# This code is contributed by PranchalK`

## C#

 `// C# program to find number``// of pairs and minimal``// possible value``using` `System;` `class` `GFG``{` `// function for finding``// pairs and min value``static` `void` `pairs(``int` `[]arr,``                  ``int` `n, ``int` `k)``{``    ``// initialize``    ``// smallest and count``    ``int` `smallest = 0;``    ``int` `count = 0;` `    ``// iterate over all pairs``    ``for` `(``int` `i = 0; i < n; i++)``        ``for``(``int` `j = i + 1; j < n; j++)``        ``{``            ``// is abs value is smaller``            ``// than smallest update``            ``// smallest and reset``            ``// count to 1``            ``if` `(Math.Abs(arr[i] +``                ``arr[j] - k) < smallest )``            ``{``                ``smallest = Math.Abs(arr[i] +``                                    ``arr[j] - k);``                ``count = 1;``            ``}` `            ``// if abs value is equal``            ``// to smallest increment``            ``// count value``            ``else` `if` `(Math.Abs(arr[i] +``                              ``arr[j] - k) ==``                                ``smallest)``                ``count++;``        ``}` `    ``// print result``    ``Console.WriteLine(``"Minimal Value = "` `+``                                ``smallest);``    ``Console.WriteLine(``"Total Pairs = "` `+``                                 ``count);``}` `// Driver Code``public` `static` `void` `Main()``{``    ``int` `[]arr = {3, 5, 7,``                 ``5, 1, 9, 9};``    ``int` `k = 12;``    ``int` `n = arr.Length;``    ``pairs(arr, n, k);``}``}` `// This code is contributed``// by anuj_67.`

## PHP

 ``

## Javascript

 ``

Output:

```Minimal Value = 0
Total Pairs = 4```

An efficient solution is to use a self balancing binary search tree (which is implemented in set in C++ and TreeSet in Java). We can find closest element in O(log n) time in map.

## C++

 `// C++ program to find number of pairs``// and minimal possible value``#include``using` `namespace` `std;` `// function for finding pairs and min value``void` `pairs(``int` `arr[], ``int` `n, ``int` `k)``{``    ``// initialize smallest and count``    ``int` `smallest = INT_MAX, count = 0;``    ``set<``int``> s;` `    ``// iterate over all pairs``    ``s.insert(arr[0]);``    ``for` `(``int` `i=1; i

Output:

```Minimal Value = 0
Total Pairs = 4```

Time Complexity : O(n Log n)