# Count triplets with sum smaller than a given value

• Difficulty Level : Medium
• Last Updated : 14 Jun, 2021

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)```

Become a success story instead of just reading about them. Prepare for coding interviews at Amazon and other top product-based companies with our Amazon Test Series. Includes topic-wise practice questions on all important DSA topics along with 10 practice contests of 2 hours each. Designed by industry experts that will surely help you practice and sharpen your programming skills. Wait no more, start your preparation today!

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``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;``    ``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` `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``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

 ``

Output:

`4`

The time complexity of the above solution is O(n3). 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``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;``    ``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

 ``

Output:

`4`

Thanks to Gaurav Ahirwar for suggesting this solution.