Count triplets with sum smaller than a given value
Last Updated :
18 Mar, 2024
Given an array of distinct integers and a sum value. Find count of triplets with sum smaller than given sum value. The expected Time Complexity is O(n2).
Examples:
Input : arr[] = {-2, 0, 1, 3}
sum = 2.
Output : 2
Explanation : Below are triplets with sum less than 2
(-2, 0, 1) and (-2, 0, 3)
Input : arr[] = {5, 1, 3, 4, 7}
sum = 12.
Output : 4
Explanation : Below are triplets with sum less than 12
(1, 3, 4), (1, 3, 5), (1, 3, 7) and
(1, 4, 5)
A Simple Solution is to run three loops to consider all triplets one by one. For every triplet, compare the sums and increment count if the triplet sum is smaller than the given sum.
C++
// A Simple C++ program to count triplets with sum smaller
// than a given value
#include <bits/stdc++.h>
using namespace std;
int countTriplets(int arr[], int n, int sum)
{
// Initialize result
int ans = 0;
// Fix the first element as A[i]
for (int i = 0; i < n - 2; i++) {
// Fix the second element as A[j]
for (int j = i + 1; j < n - 1; j++) {
// Now look for the third number
for (int k = j + 1; k < n; k++)
if (arr[i] + arr[j] + arr[k] < sum)
ans++;
}
}
return ans;
}
// Driver program
int main()
{
int arr[] = { 5, 1, 3, 4, 7 };
int n = sizeof arr / sizeof arr[0];
int sum = 12;
cout << countTriplets(arr, n, sum) << endl;
return 0;
}
// This code is contributed by Aditya Kumar (adityakumar129)
C
// A Simple C program to count triplets with sum smaller
// than a given value
#include <stdio.h>
int countTriplets(int arr[], int n, int sum)
{
// Initialize result
int ans = 0;
// Fix the first element as A[i]
for (int i = 0; i < n - 2; i++) {
// Fix the second element as A[j]
for (int j = i + 1; j < n - 1; j++) {
// Now look for the third number
for (int k = j + 1; k < n; k++)
if (arr[i] + arr[j] + arr[k] < sum)
ans++;
}
}
return ans;
}
// Driver program
int main()
{
int arr[] = { 5, 1, 3, 4, 7 };
int n = sizeof arr / sizeof arr[0];
int sum = 12;
printf("%d\n", countTriplets(arr, n, sum));
return 0;
}
// This code is contributed by Aditya Kumar (adityakumar129)
Java
// A Simple Java program to count triplets with sum smaller
// than a given value
class Test
{
static int arr[] = new int[]{5, 1, 3, 4, 7};
static int countTriplets(int n, int sum)
{
// Initialize result
int ans = 0;
// Fix the first element as A[i]
for (int i = 0; i < n-2; i++)
{
// Fix the second element as A[j]
for (int j = i+1; j < n-1; j++)
{
// Now look for the third number
for (int k = j+1; k < n; k++)
if (arr[i] + arr[j] + arr[k] < sum)
ans++;
}
}
return ans;
}
// Driver method to test the above function
public static void main(String[] args)
{
int sum = 12;
System.out.println(countTriplets(arr.length, sum));
}
}
Python 3
# A Simple Python 3 program to count triplets with sum smaller
# than a given value
#include<bits/stdc++.h>
def countTriplets(arr, n, sum):
# Initialize result
ans = 0
# Fix the first element as A[i]
for i in range( 0 ,n-2):
# Fix the second element as A[j]
for j in range( i+1 ,n-1):
# Now look for the third number
for k in range( j+1, n):
if (arr[i] + arr[j] + arr[k] < sum):
ans+=1
return ans
# Driver program
arr = [5, 1, 3, 4, 7]
n = len(arr)
sum = 12
print(countTriplets(arr, n, sum))
#Contributed by Smitha
C#
// A Simple C# program to count triplets with sum smaller
// than a given value
using System;
class Test
{
static int[] arr = new int[]{5, 1, 3, 4, 7};
static int countTriplets(int n, int sum)
{
// Initialize result
int ans = 0;
// Fix the first element as A[i]
for (int i = 0; i < n-2; i++)
{
// Fix the second element as A[j]
for (int j = i+1; j < n-1; j++)
{
// Now look for the third number
for (int k = j+1; k < n; k++)
if (arr[i] + arr[j] + arr[k] < sum)
ans++;
}
}
return ans;
}
// Driver method to test the above function
public static void Main()
{
int sum = 12;
Console.Write(countTriplets(arr.Length, sum));
}
}
JavaScript
<script>
// A Simple Javascript program to count triplets with sum smaller
// than a given value
let arr = [5, 1, 3, 4, 7];
function countTriplets(n,sum)
{
// Initialize result
let ans = 0;
// Fix the first element as A[i]
for (let i = 0; i < n-2; i++)
{
// Fix the second element as A[j]
for (let j = i + 1; j < n-1; j++)
{
// Now look for the third number
for (let k = j + 1; k < n; k++)
if (arr[i] + arr[j] + arr[k] < sum)
ans++;
}
}
return ans;
}
// Driver method to test the above function
let sum = 12;
document.write(countTriplets(arr.length, sum));
// This code is contributed by avanitrachhadiya2155
</script>
Output:
4
Time Complexity: O(n3)
Auxiliary Space: O(1)
An Efficient Solution can count triplets in O(n2) by sorting the array first, and then using method 1 of this post in a loop.
1) Sort the input array in increasing order.
2) Initialize result as 0.
3) Run a loop from i = 0 to n-2. An iteration of this loop finds all
triplets with arr[i] as first element.
a) Initialize other two elements as corner elements of subarray
arr[i+1..n-1], i.e., j = i+1 and k = n-1
b) Move j and k toward each other until they meet, i.e., while (j<k),
(i) If arr[i] + arr[j] + arr[k] >= sum
then k--
// Else for current i and j, there can (k-j) possible third elements
// that satisfy the constraint.
(ii) Else Do ans += (k - j) followed by j++
Below is the implementation of the above idea.
C++
// C++ program to count triplets with sum smaller than a given value
#include<bits/stdc++.h>
using namespace std;
int countTriplets(int arr[], int n, int sum)
{
// Sort input array
sort(arr, arr+n);
// Initialize result
int ans = 0;
// Every iteration of loop counts triplet with
// first element as arr[i].
for (int i = 0; i < n - 2; i++)
{
// Initialize other two elements as corner elements
// of subarray arr[j+1..k]
int j = i + 1, k = n - 1;
// Use Meet in the Middle concept
while (j < k)
{
// If sum of current triplet is more or equal,
// move right corner to look for smaller values
if (arr[i] + arr[j] + arr[k] >= sum)
k--;
// Else move left corner
else
{
// This is important. For current i and j, there
// can be total k-j third elements.
ans += (k - j);
j++;
}
}
}
return ans;
}
// Driver program
int main()
{
int arr[] = {5, 1, 3, 4, 7};
int n = sizeof arr / sizeof arr[0];
int sum = 12;
cout << countTriplets(arr, n, sum) << endl;
return 0;
}
Java
// A Simple Java program to count triplets with sum smaller
// than a given value
import java.util.Arrays;
class Test
{
static int arr[] = new int[]{5, 1, 3, 4, 7};
static int countTriplets(int n, int sum)
{
// Sort input array
Arrays.sort(arr);
// Initialize result
int ans = 0;
// Every iteration of loop counts triplet with
// first element as arr[i].
for (int i = 0; i < n - 2; i++)
{
// Initialize other two elements as corner elements
// of subarray arr[j+1..k]
int j = i + 1, k = n - 1;
// Use Meet in the Middle concept
while (j < k)
{
// If sum of current triplet is more or equal,
// move right corner to look for smaller values
if (arr[i] + arr[j] + arr[k] >= sum)
k--;
// Else move left corner
else
{
// This is important. For current i and j, there
// can be total k-j third elements.
ans += (k - j);
j++;
}
}
}
return ans;
}
// Driver method to test the above function
public static void main(String[] args)
{
int sum = 12;
System.out.println(countTriplets(arr.length, sum));
}
}
Python3
# Python3 program to count triplets with
# sum smaller than a given value
# Function to count triplets with sum smaller
# than a given value
def countTriplets(arr,n,sum):
# Sort input array
arr.sort()
# Initialize result
ans = 0
# Every iteration of loop counts triplet with
# first element as arr[i].
for i in range(0,n-2):
# Initialize other two elements as corner elements
# of subarray arr[j+1..k]
j = i + 1
k = n-1
# Use Meet in the Middle concept
while(j < k):
# If sum of current triplet is more or equal,
# move right corner to look for smaller values
if (arr[i]+arr[j]+arr[k] >=sum):
k = k-1
# Else move left corner
else:
# This is important. For current i and j, there
# can be total k-j third elements.
ans += (k - j)
j = j+1
return ans
# Driver program
if __name__=='__main__':
arr = [5, 1, 3, 4, 7]
n = len(arr)
sum = 12
print(countTriplets(arr, n, sum))
# This code is contributed by
# Yatin Gupta
C#
// A Simple C# program to count
// triplets with sum smaller
// than a given value
using System;
class GFG
{
static int []arr = new int[]{5, 1, 3, 4, 7};
static int countTriplets(int n, int sum)
{
// Sort input array
Array.Sort(arr);
// Initialize result
int ans = 0;
// Every iteration of loop
// counts triplet with
// first element as arr[i].
for (int i = 0; i < n - 2; i++)
{
// Initialize other two
// elements as corner elements
// of subarray arr[j+1..k]
int j = i + 1, k = n - 1;
// Use Meet in the Middle concept
while (j < k)
{
// If sum of current triplet
// is more or equal, move right
// corner to look for smaller values
if (arr[i] + arr[j] + arr[k] >= sum)
k--;
// Else move left corner
else
{
// This is important. For
// current i and j, there
// can be total k-j third elements.
ans += (k - j);
j++;
}
}
}
return ans;
}
// Driver Code
public static void Main()
{
int sum = 12;
Console.Write(countTriplets(arr.Length, sum));
}
}
// This code is contributed by Smitha
JavaScript
<script>
// A Simple Javascript program to count triplets with sum smaller
// than a given value
let arr = [5, 1, 3, 4, 7];
function countTriplets(n,sum)
{
// Sort input array
arr.sort(function(a,b){return b-a});
// Initialize result
let ans = 0;
// Every iteration of loop counts triplet with
// first element as arr[i].
for (let i = 0; i < n - 2; i++)
{
// Initialize other two elements as corner elements
// of subarray arr[j+1..k]
let j = i + 1, k = n - 1;
// Use Meet in the Middle concept
while (j < k)
{
// If sum of current triplet is more or equal,
// move right corner to look for smaller values
if (arr[i] + arr[j] + arr[k] >= sum)
k--;
// Else move left corner
else
{
// This is important. For current i and j, there
// can be total k-j third elements.
ans += (k - j);
j++;
}
}
}
return ans;
}
// Driver method to test the above function
let sum = 12;
document.write(countTriplets(arr.length, sum));
// This code is contributed by rag2127
</script>
Output:
4
Time Complexity: O(n2)
Auxiliary Space: O(1)
Thanks to Gaurav Ahirwar for suggesting this solution.
Similar Reads
Javascript Program to Count triplets with sum smaller than a given value Given an array of distinct integers and a sum value. Find the count of triplets with a sum smaller than the given sum value. The expected Time Complexity is O(n2).Examples: Input : arr[] = {-2, 0, 1, 3} sum = 2. Output : 2 Explanation : Below are triplets with sum less than 2 (-2, 0, 1) and (-2, 0,
3 min read
Find all triplets that sum to a given value or less Given an array, arr[] and integer X. Find all the possible triplets from an arr[] whose sum is either equal to less than X. Example: Input : arr[] = {-1, 1, 3, 2}, X = 3Output: (-1, 1, 3), (-1, 1, 2)Explanation: If checked manually, the above two are the only triplets from possible 4 triplets whose
7 min read
Print triplets with sum less than k Given an array of distinct integers and a sum value. Print all triplets with sum smaller than given sum value. Expected Time Complexity is O(n2). Examples: Input : arr[] = {-2, 0, 1, 3} sum = 2. Output : (-2, 0, 1) (-2, 0, 3) Explanation : The two triplets have sum less than 2. Input : arr[] = {5, 1
14 min read
Count non-negative triplets with sum equal to N Given an integer N. The task is to find the number of different ordered triplets(a, b, c) of non-negative integers such that a + b + c = N .Examples: Input : N = 2 Output : 6 Triplets are : (0, 0, 2), (1, 0, 1), (0, 1, 1), (2, 0, 0), (0, 2, 0), (1, 1, 0)Input : N = 50 Output : 1326 Naive Approach: W
5 min read
Count numbers (smaller than or equal to N) with given digit sum Given a number N and a sum S, find the count of numbers upto N that have digit sum equal to S. Examples: Input : N = 100, S = 4 Output : 5 Upto 100 only 5 numbers(4, 13, 22, 31, 40) can produce 4 as their sum of digits. Input : N = 1000, S = 1 Output : 4 Upto 1000 only 4 numbers(1, 10, 100 and 1000)
8 min read