Count of triplets in an Array (i, j, k) such that i < j < k and a[k] < a[i] < a[j]
Last Updated :
13 Apr, 2021
Given an array arr[] of N integers, the task is to count number of triplets (i, j, k) in the array such that a[k] < a[i] < a[j] and i < j < k.
Examples:
Input: arr[] = {2, 5, 1, 3, 0}
Output: 4
Explanation:
Below are the triplets (i, j, k) such that i < j < k and a[k] < a[i] < a[j]:
1. (0, 1, 2) and arr[2] < arr[0] 1 < 2 < 5.
2. (0, 1, 4) and arr[4] < arr[0] 0 < 2 < 5.
3. (0, 3, 4) and arr[4] < arr[0] 0 < 2 < 3.
4. (2, 3, 4) and arr[4] < arr[2] 0 < 1 < 3.
Input: arr[] = {2, 5, 1, 2, 0, 3, 10, 1, 5, 0 }
Output: 25
Naive Approach: The idea is to iterate 3 loops and check for each triplet (i, j, k) satisfy the given conditions or not. If yes then increment for that triplet and print the final count after checking all the triplets.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int CountTriplets( int arr[], int n)
{
int cnt = 0;
for ( int i = 0; i < n; i++)
for ( int j = i + 1; j < n; j++)
for ( int k = j + 1; k < n; k++)
if (arr[k] < arr[i]
&& arr[i] < arr[j]) {
cnt += 1;
}
return cnt;
}
int main()
{
int arr[] = { 2, 5, 1, 3, 0 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << CountTriplets(arr, n)
<< endl;
return 0;
}
|
Java
class GFG{
static int CountTriplets( int arr[], int n)
{
int cnt = 0 ;
for ( int i = 0 ; i < n; i++)
for ( int j = i + 1 ; j < n; j++)
for ( int k = j + 1 ; k < n; k++)
if (arr[k] < arr[i] &&
arr[i] < arr[j])
{
cnt += 1 ;
}
return cnt;
}
public static void main(String[] args)
{
int arr[] = new int []{ 2 , 5 , 1 , 3 , 0 };
int n = arr.length;
System.out.print(CountTriplets(arr, n));
}
}
|
Python3
def CountTriplets(arr, n):
cnt = 0 ;
for i in range ( 0 , n):
for j in range (i + 1 , n):
for k in range (j + 1 , n):
if (arr[k] < arr[i] and arr[i] < arr[j]):
cnt + = 1 ;
return cnt;
arr = [ 2 , 5 , 1 , 3 , 0 ];
n = len (arr);
print (CountTriplets(arr, n))
|
C#
using System;
class GFG{
static int CountTriplets( int []arr, int n)
{
int cnt = 0;
for ( int i = 0; i < n; i++)
for ( int j = i + 1; j < n; j++)
for ( int k = j + 1; k < n; k++)
if (arr[k] < arr[i] &&
arr[i] < arr[j])
{
cnt += 1;
}
return cnt;
}
public static void Main( string [] args)
{
int []arr = new int []{ 2, 5, 1, 3, 0 };
int n = arr.Length;
Console.Write(CountTriplets(arr, n));
}
}
|
Javascript
<script>
function CountTriplets(arr, n)
{
let cnt = 0;
for (let i = 0; i < n; i++)
for (let j = i + 1; j < n; j++)
for (let k = j + 1; k < n; k++)
if (arr[k] < arr[i]
&& arr[i] < arr[j]) {
cnt += 1;
}
return cnt;
}
let arr = [ 2, 5, 1, 3, 0 ];
let n = arr.length;
document.write(CountTriplets(arr, n));
</script>
|
Time Complexity: O(N3)
Auxiliary Space: O(1)
Efficient Approach: We can reduce the complexity from N^3 to N^2, using the below steps:
- Run two loops to find pairs (i, j) such that i < j and arr[j] > arr[i] and keep the count of these pairs as cnt.
- While in the above loop if there exists any element such arr[j] < arr[i] then increment the count of triplets by cnt as the current element is the Kth element such that a[k] < a[i] < a[j] for triplet i < j < k.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int CountTriplets( int a[], int n)
{
int ans = 0;
for ( int i = 0; i < n; i++) {
int cnt = 0;
for ( int j = i + 1; j < n; j++) {
if (a[j] > a[i])
cnt++;
else
ans += cnt;
}
}
return ans;
}
int main()
{
int arr[] = { 2, 5, 1, 3, 0 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << CountTriplets(arr, n) << endl;
return 0;
}
|
Java
class GFG{
static int CountTriplets( int a[], int n)
{
int ans = 0 ;
for ( int i = 0 ; i < n; i++)
{
int cnt = 0 ;
for ( int j = i + 1 ; j < n; j++)
{
if (a[j] > a[i])
cnt++;
else
ans += cnt;
}
}
return ans;
}
public static void main(String[] args)
{
int arr[] = { 2 , 5 , 1 , 3 , 0 };
int n = arr.length;
System.out.print(CountTriplets(arr, n));
}
}
|
Python3
def CountTriplets(a, n):
ans = 0
for i in range (n):
cnt = 0
for j in range (i + 1 , n):
if (a[j] > a[i]):
cnt + = 1
else :
ans + = cnt
return ans
if __name__ = = "__main__" :
arr = [ 2 , 5 , 1 , 3 , 0 ]
n = len (arr)
print (CountTriplets(arr, n))
|
C#
using System;
class GFG{
static int CountTriplets( int []a, int n)
{
int ans = 0;
for ( int i = 0; i < n; i++)
{
int cnt = 0;
for ( int j = i + 1; j < n; j++)
{
if (a[j] > a[i])
cnt++;
else
ans += cnt;
}
}
return ans;
}
public static void Main()
{
int []arr = { 2, 5, 1, 3, 0 };
int n = arr.Length;
Console.Write(CountTriplets(arr, n));
}
}
|
Javascript
<script>
function CountTriplets(a, n)
{
let ans = 0;
for (let i = 0; i < n; i++)
{
let cnt = 0;
for (let j = i + 1; j < n; j++)
{
if (a[j] > a[i])
cnt++;
else
ans += cnt;
}
}
return ans;
}
let arr = [ 2, 5, 1, 3, 0 ];
let n = arr.length;
document.write(CountTriplets(arr, n));
</script>
|
Time Complexity: O(N2)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...