Given an array of n integers, We need to find all pairs with difference less than k
Examples :
Input : a[] = {1, 10, 4, 2}
K = 3
Output : 2
We can make only two pairs
with difference less than 3.
(1, 2) and (4, 2)
Input : a[] = {1, 8, 7}
K = 7
Output : 2
Pairs with difference less than 7
are (1, 7) and (8, 7)Method 1 (Simple) : Run two nested loops. The outer loop picks every element x one by one. The inner loop considers all elements after x and checks if difference is within limits or not.
C++
#include <bits/stdc++.h>
using namespace std;
int countPairs(int a[], int n, int k)
{
int res = 0;
for (int i = 0; i < n; i++)
for (int j=i+1; j<n; j++)
if (abs(a[j] - a[i]) < k)
res++;
return res;
}
int main()
{
int a[] = {1, 10, 4, 2};
int k = 3;
int n = sizeof(a) / sizeof(a[0]);
cout << countPairs(a, n, k) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int countPairs(int a[], int n, int k)
{
int res = 0;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (Math.abs(a[j] - a[i]) < k)
res++;
return res;
}
public static void main (String[] args)
{
int a[] = {1, 10, 4, 2};
int k = 3;
int n = a.length;
System.out.println(countPairs(a, n, k));
}
}
|
Python3
def countPairs(a, n, k):
res = 0
for i in range(n):
for j in range(i + 1, n):
if (abs(a[j] - a[i]) < k):
res += 1
return res
a = [1, 10, 4, 2]
k = 3
n = len(a)
print(countPairs(a, n, k), end = "")
|
C#
using System;
class GFG {
static int countPairs(int []a, int n,
int k)
{
int res = 0;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (Math.Abs(a[j] - a[i]) < k)
res++;
return res;
}
public static void Main ()
{
int []a = {1, 10, 4, 2};
int k = 3;
int n = a.Length;
Console.WriteLine(countPairs(a, n, k));
}
}
|
PHP
<?php
function countPairs( $a, $n, $k)
{
$res = 0;
for($i = 0; $i < $n; $i++)
for($j = $i + 1; $j < $n; $j++)
if (abs($a[$j] - $a[$i]) < $k)
$res++;
return $res;
}
$a = array(1, 10, 4, 2);
$k = 3;
$n = count($a);
echo countPairs($a, $n, $k);
?>
|
Javascript
<script>
function countPairs(a, n, k)
{
var res = 0;
for(var i = 0; i < n; i++)
for(var j = i + 1; j < n; j++)
if (Math.abs(a[j] - a[i]) < k)
res++;
return res;
}
var a = [ 1, 10, 4, 2 ];
var k = 3;
var n = a.length;
document.write(countPairs(a, n, k));
</script>
|
Output :
2
Time Complexity : O(n2)
Auxiliary Space : O(1)
Method 2 (Sorting) : First we sort the array. Then we start from first element and keep considering pairs while difference is less than k. If we stop the loop when we find difference more than or equal to k and move to next element.
C++
#include <bits/stdc++.h>
using namespace std;
int countPairs(int a[], int n, int k)
{
sort(a, a + n);
int res = 0;
for (int i = 0; i < n; i++) {
int j = i+1;
while (j < n && a[j] - a[i] < k) {
res++;
j++;
}
}
return res;
}
int main()
{
int a[] = {1, 10, 4, 2};
int k = 3;
int n = sizeof(a) / sizeof(a[0]);
cout << countPairs(a, n, k) << endl;
return 0;
}
|
Java
import java.io.*;
import java.util.Arrays;
class GFG
{
static int countPairs(int a[], int n, int k)
{
Arrays.sort(a);
int res = 0;
for (int i = 0; i < n; i++)
{
int j = i + 1;
while (j < n && a[j] - a[i] < k)
{
res++;
j++;
}
}
return res;
}
public static void main (String[] args)
{
int a[] = {1, 10, 4, 2};
int k = 3;
int n = a.length;
System.out.println(countPairs(a, n, k));
}
}
|
Python3
def countPairs(a, n, k):
a.sort()
res = 0
for i in range(n):
j = i+1
while (j < n and a[j] - a[i] < k):
res += 1
j += 1
return res
a = [1, 10, 4, 2]
k = 3
n = len(a)
print(countPairs(a, n, k), end = "")
|
C#
using System;
class GFG {
static int countPairs(int []a, int n,
int k)
{
Array.Sort(a);
int res = 0;
for (int i = 0; i < n; i++)
{
int j = i + 1;
while (j < n && a[j] - a[i] < k)
{
res++;
j++;
}
}
return res;
}
public static void Main ()
{
int []a = {1, 10, 4, 2};
int k = 3;
int n = a.Length;
Console.WriteLine(countPairs(a, n, k));
}
}
|
PHP
<?php
function countPairs( $a, $n, $k)
{
sort($a);
$res = 0;
for ( $i = 0; $i < $n; $i++)
{
$j = $i + 1;
while ($j < $n and
$a[$j] - $a[$i] < $k)
{
$res++;
$j++;
}
}
return $res;
}
$a = array(1, 10, 4, 2);
$k = 3;
$n = count($a);
echo countPairs($a, $n, $k);
?>
|
Javascript
<script>
function countPairs(a, n, k)
{
a.sort((a, b) => a - b);
let res = 0;
for(let i = 0; i < n; i++)
{
let j = i + 1;
while (j < n && a[j] - a[i] < k)
{
res++;
j++;
}
}
return res;
}
let a = [ 1, 10, 4, 2 ];
let k = 3;
let n = a.length;
document.write(countPairs(a, n, k) + "<br>");
</script>
|
Output :
2
Time complexity : O(res) where res is number of pairs in output. Note that in worst case this also takes O(n2) time but works much better in general.
This article is contributed by Harsha Mogali. If you like GeeksforGeeks and write.geeksforgeeks.org”>write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.