# Count elements in first Array with absolute difference greater than K with an element in second Array

• Difficulty Level : Medium
• Last Updated : 15 Nov, 2021

Given two arrays arr1[] and arr2[] and an integer K, our task is to find the number elements in the first array, for an element x, in arr1[], there exists at least one element y, in arr2[] such that absolute difference of x and y is greater than the integer K.

Examples:

Input: arr1 = {3, 1, 4}, arr2 = {5, 1, 2}, K = 2
Output:
Explanation:
Such elements are 1 and 4.
For 1, arr2[] has 5 and abs(1 – 5) = 4 which is greater than 2.
For 4, arr2[] has 1 and abs(4 – 1) = 3 which again is greater than 2.

Input: arr1 = {1, 2}, arr2 = {4, 6}, K = 3
Output:
Explanation:
Such elements are 1 and 2.
For 1, arr2[] has 6 and abs(1 – 6) = 5 which is greater than 3.
For 2, arr2[] has 6 and abs(2 – 6) = 4 which is greater than 3.

Naive Approach: Iterate for each element in arr1[] and check whether or not there exists an element in arr2 such that their absolute difference is greater than the value K.

Time complexity: O(N * M) where N and M are the sizes of the arrays 1 and 2 respectively.

Efficient Approach: To optimize the above method we have to observe that for each element in arr1[], we need only the smallest and largest element of arr2[] to check if it is distant or not. For each element x, in arr1, if the absolute difference of smallest or the largest value and x is greater than K then that element is distant.

Below is the implementation of the above approach:

## C++

 `// C++ program to count elements in first Array``// with absolute difference greater than K``// with an element in second Array` `#include ``using` `namespace` `std;` `// Function to count the such elements``void` `countDist(``int` `arr1[], ``int` `n, ``int` `arr2[],``               ``int` `m, ``int` `k)``{``    ``// Store count of required elements in arr1``    ``int` `count = 0;` `    ``// Initialise the smallest and the largest``    ``// value from the second array arr2[]``    ``int` `smallest = arr2;``    ``int` `largest = arr2;` `    ``// Find the smallest and``    ``// the largest element in arr2``    ``for` `(``int` `i = 0; i < m; i++) {``        ``smallest = max(smallest, arr2[i]);``        ``largest = min(largest, arr1[i]);``    ``}``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// Check if absolute difference of smallest``        ``// and arr1[i] or largest and arr1[i] is > K``        ``// then arr[i] is a required element``        ``if` `(``abs``(arr1[i] - smallest) > k``            ``|| ``abs``(arr1[i] - largest) > k)``            ``count++;``    ``}` `    ``// Print the final result``    ``cout << count;``}` `// Driver code``int` `main()``{``    ``int` `arr1[] = { 3, 1, 4 };``    ``int` `n = ``sizeof``(arr1) / ``sizeof``(arr1);``    ``int` `arr2[] = { 5, 1, 2 };``    ``int` `m = ``sizeof``(arr2) / ``sizeof``(arr2);``    ``int` `k = 2;` `    ``countDist(arr1, n, arr2, m, k);` `    ``return` `0;``}`

## Java

 `// Java program to count elements in first Array``// with absolute difference greater than K``// with an element in second Array``class` `GFG{` `// Function to count the such elements``static` `void` `countDist(``int` `arr1[], ``int` `n,``                      ``int` `arr2[], ``int` `m,``                      ``int` `k)``{``    ``// Store count of required elements in arr1``    ``int` `count = ``0``;` `    ``// Initialise the smallest and the largest``    ``// value from the second array arr2[]``    ``int` `smallest = arr2[``0``];``    ``int` `largest = arr2[``0``];` `    ``// Find the smallest and``    ``// the largest element in arr2``    ``for``(``int` `i = ``0``; i < m; i++)``    ``{``       ``smallest = Math.max(smallest, arr2[i]);``       ``largest = Math.min(largest, arr1[i]);``    ``}``    ``for``(``int` `i = ``0``; i < n; i++)``    ``{` `       ``// Check if absolute difference``       ``// of smallest and arr1[i] or``       ``// largest and arr1[i] is > K``       ``// then arr[i] is a required element``       ``if` `(Math.abs(arr1[i] - smallest) > k ||``           ``Math.abs(arr1[i] - largest) > k)``           ``count++;``    ``}` `    ``// Print the final result``    ``System.out.print(count);``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `arr1[] = { ``3``, ``1``, ``4` `};``    ``int` `n = arr1.length;``    ``int` `arr2[] = { ``5``, ``1``, ``2` `};``    ``int` `m = arr2.length;``    ``int` `k = ``2``;` `    ``countDist(arr1, n, arr2, m, k);``}``}` `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 program to count elements in the first Array``# with an absolute difference greater than K``# with an element in the second Array` `# Function to count the such elements``def` `countDist(arr1, n, arr2, m, k):``    ` `    ``# Store count of required elements in arr1``    ``count ``=` `0` `    ``# Initialise the smallest and the largest``    ``# value from the second array arr2[]``    ``smallest ``=` `arr2[``0``]``    ``largest ``=` `arr2[``0``]` `    ``# Find the smallest and``    ``# the largest element in arr2``    ``for` `i ``in` `range``(m):``        ``smallest ``=` `max``(smallest, arr2[i])``        ``largest ``=` `min``(largest, arr1[i])` `    ``for` `i ``in` `range``(n):` `        ``# Check if absolute difference of smallest``        ``# and arr1[i] or largest and arr1[i] is > K``        ``# then arr[i] is a required element``        ``if` `(``abs``(arr1[i] ``-` `smallest) > k``            ``or` `abs``(arr1[i] ``-` `largest) > k):``            ``count ``+``=` `1` `    ``# Print final result``    ``print``(count)`  `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``arr1``=` `[ ``3``, ``1``, ``4` `]``    ``n ``=` `len``(arr1)``    ``arr2``=` `[ ``5``, ``1``, ``2` `]``    ``m ``=` `len``(arr2)``    ``k ``=` `2` `    ``countDist(arr1, n, arr2, m, k)``    ` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program to count elements in first array``// with absolute difference greater than K``// with an element in second Array``using` `System;` `class` `GFG{` `// Function to count the such elements``static` `void` `countDist(``int` `[]arr1, ``int` `n,``                      ``int` `[]arr2, ``int` `m,``                      ``int` `k)``{``    ``// Store count of required elements in arr1``    ``int` `count = 0;` `    ``// Initialise the smallest and the largest``    ``// value from the second array arr2[]``    ``int` `smallest = arr2;``    ``int` `largest = arr2;` `    ``// Find the smallest and``    ``// the largest element in arr2``    ``for``(``int` `i = 0; i < m; i++)``    ``{``       ``smallest = Math.Max(smallest, arr2[i]);``       ``largest = Math.Min(largest, arr1[i]);``    ``}``    ``for``(``int` `i = 0; i < n; i++)``    ``{``       ` `       ``// Check if absolute difference``       ``// of smallest and arr1[i] or``       ``// largest and arr1[i] is > K``       ``// then arr[i] is a required element``       ``if` `(Math.Abs(arr1[i] - smallest) > k ||``           ``Math.Abs(arr1[i] - largest) > k)``           ``count++;``    ``}` `    ``// Print the readonly result``    ``Console.Write(count);``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `[]arr1 = { 3, 1, 4 };``    ``int` `n = arr1.Length;``    ``int` `[]arr2 = { 5, 1, 2 };``    ``int` `m = arr2.Length;``    ``int` `k = 2;` `    ``countDist(arr1, n, arr2, m, k);``}``}` `// This code is contributed by gauravrajput1`

## Javascript

 ``

Output:

`2`

Time Complexity: O(N + M), where N and M are the sizes of the given arrays.
Auxiliary Space: O(1).

My Personal Notes arrow_drop_up