Count elements in first Array with absolute difference greater than K with an element in second Array
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: 2
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: 2
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 <bits/stdc++.h>
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[0];
int largest = arr2[0];
// 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[0]);
int arr2[] = { 5, 1, 2 };
int m = sizeof(arr2) / sizeof(arr2[0]);
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[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 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
<script>
// Javascript program to count elements in
// first Array with absolute difference
// greater than K with an element in
// second Array
// Function to count the such elements
function countDist(arr1, n, arr2, m, k)
{
// Store count of required elements in arr1
var count = 0;
// Initialise the smallest and the largest
// value from the second array arr2
var smallest = arr2[0];
var largest = arr2[0];
// Find the smallest and
// the largest element in arr2
for(i = 0; i < m; i++)
{
smallest = Math.max(smallest, arr2[i]);
largest = Math.min(largest, arr1[i]);
}
for(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
document.write(count);
}
// Driver code
var arr1 = [ 3, 1, 4 ];
var n = arr1.length;
var arr2 = [ 5, 1, 2 ];
var m = arr2.length;
var k = 2;
countDist(arr1, n, arr2, m, k);
// This code is contributed by umadevi9616
</script>
Time Complexity: O(N + M), where N and M are the sizes of the given arrays.
Auxiliary Space: O(1).
Similar Reads
Count of elements whose absolute difference with the sum of all the other elements is greater than k Given an array arr[] of N integers and an integer K, the task is to find the number of anomalies in the array. An anomaly is a number for which the absolute difference between it and all the other numbers in the array is greater than K. Find the number of anomalies. Examples: Input: arr[] = {1, 3, 5
5 min read
For each element in 1st array count elements less than or equal to it in 2nd array | Set 2 Given two unsorted arrays arr1[] and arr2[]. They may contain duplicates. For each element in arr1[] count elements less than or equal to it in array arr2[]. Examples: Input : arr1[] = [1, 2, 3, 4, 7, 9] arr2[] = [0, 1, 2, 1, 1, 4] Output : [4, 5, 5, 6, 6, 6] Explanation: There are 4 elements less t
13 min read
Count of Array elements greater than all elements on its left and at least K elements on its right Given an array A[ ] consisting of N distinct integers, the task is to find the number of elements which are strictly greater than all the elements preceding it and strictly greater than at least K elements on its right. Examples: Input: A[] = {2, 5, 1, 7, 3, 4, 0}, K = 3 Output: 2 Explanation: The o
15+ min read
Count of elements such that its sum/difference with X also exists in the Array Given an array arr[] and an integer X, the task is to count the elements of the array such that their exist a element arr[i] - X or arr[i] + X in the array.Examples: Input: arr[] = {3, 4, 2, 5}, X = 2 Output: 4 Explanation: In the above-given example, there are 4 such numbers - For Element 3: Possib
9 min read
Count of Array elements greater than all elements on its left and next K elements on its right Given an array arr[], the task is to print the number of elements which are greater than all the elements on its left as well as greater than the next K elements on its right. Examples: Input: arr[] = { 4, 2, 3, 6, 4, 3, 2}, K = 2 Output: 2 Explanation: arr[0](= 4): arr[0] is the 1st element in the
14 min read