# Count pairs in a sorted array whose sum is less than x

Given a sorted integer array and number x, the task is to count pairs in array whose sum is less than x.

Examples:

Input : arr[] = {1, 3, 7, 9, 10, 11} x = 7 Output : 1 There is only one pair (1, 3) Input : arr[] = {1, 2, 3, 4, 5, 6, 7, 8} x = 7 Output : 6 Pairs are (1, 2), (1, 3), (1, 4), (1, 5) (2, 3) and (2, 4)

A **simple solution** of this problem run two loops to generate all pairs and one by one and check if current pair’s sum is less than x or not.

An **Efficient solution** of this problem is take initial and last value of index in l and r variable.

1) Initialize two variables l and r to find the candidate elements in the sorted array. (a) l = 0 (b) r = n - 1 2) Initialize : result = 0 2) Loop while l < r. // If current left and current // right have sum smaller than x, // the all elements from l+1 to r // form a pair with current (a) If (arr[l] + arr[r] < x) result = result + (r - l) (b) Else r--; 3) Return result

Below is the implementation of above steps.

## C++

`// C++ program to count pairs in an array` `// whose sum is less than given number x` `#include<bits/stdc++.h>` `using` `namespace` `std;` `// Function to count pairs in array` `// with sum less than x.` `int` `findPairs(` `int` `arr[],` `int` `n,` `int` `x)` `{` ` ` `int` `l = 0, r = n-1;` ` ` `int` `result = 0;` ` ` `while` `(l < r)` ` ` `{` ` ` `// If current left and current` ` ` `// right have sum smaller than x,` ` ` `// the all elements from l+1 to r` ` ` `// form a pair with current l.` ` ` `if` `(arr[l] + arr[r] < x)` ` ` `{` ` ` `result += (r - l);` ` ` `l++;` ` ` `}` ` ` `// Move to smaller value` ` ` `else` ` ` `r--;` ` ` `}` ` ` `return` `result;` `}` `// Driven code` `int` `main()` `{` ` ` `int` `arr[] = {1, 2, 3, 4, 5, 6, 7, 8};` ` ` `int` `n = ` `sizeof` `(arr)/` `sizeof` `(` `int` `);` ` ` `int` `x = 7;` ` ` `cout << findPairs(arr, n, x);` ` ` `return` `0;` `}` |

## Java

`// Java program to count pairs in an array` `// whose sum is less than given number x` `class` `GFG {` ` ` ` ` `// Function to count pairs in array` ` ` `// with sum less than x.` ` ` `static` `int` `findPairs(` `int` `arr[], ` `int` `n, ` `int` `x)` ` ` `{` ` ` ` ` `int` `l = ` `0` `, r = n - ` `1` `;` ` ` `int` `result = ` `0` `;` ` ` ` ` `while` `(l < r)` ` ` `{` ` ` ` ` `// If current left and current` ` ` `// right have sum smaller than x,` ` ` `// the all elements from l+1 to r` ` ` `// form a pair with current l.` ` ` `if` `(arr[l] + arr[r] < x)` ` ` `{` ` ` `result += (r - l);` ` ` `l++;` ` ` `}` ` ` ` ` `// Move to smaller value` ` ` `else` ` ` `r--;` ` ` `}` ` ` ` ` `return` `result;` ` ` `}` ` ` ` ` `// Driver method` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` ` ` `int` `arr[] = {` `1` `, ` `2` `, ` `3` `, ` `4` `, ` `5` `, ` `6` `, ` `7` `, ` `8` `};` ` ` `int` `n = arr.length;` ` ` `int` `x = ` `7` `;` ` ` ` ` `System.out.print(findPairs(arr, n, x));` ` ` `}` `}` `// This code is contributed by Anant Agarwal.` |

## Python3

`# Python3 program to count pairs` `# in an array whose sum is less` `# than given number x` `# Function to count pairs in array` `# with sum less than x.` `def` `findPairs(arr, n, x):` ` ` `l ` `=` `0` `; r ` `=` `n` `-` `1` ` ` `result ` `=` `0` ` ` `while` `(l < r):` ` ` ` ` `# If current left and current` ` ` `# right have sum smaller than x,` ` ` `# the all elements from l+1 to r` ` ` `# form a pair with current l.` ` ` `if` `(arr[l] ` `+` `arr[r] < x):` ` ` ` ` `result ` `+` `=` `(r ` `-` `l)` ` ` `l ` `+` `=` `1` ` ` ` ` `# Move to smaller value` ` ` `else` `:` ` ` `r ` `-` `=` `1` ` ` `return` `result` ` ` `# Driver Code` `arr ` `=` `[` `1` `, ` `2` `, ` `3` `, ` `4` `, ` `5` `, ` `6` `, ` `7` `, ` `8` `]` `n ` `=` `len` `(arr)` `x ` `=` `7` `print` `(findPairs(arr, n, x))` `# This code is contributed by Anant Agarwal.` |

## C#

`// C# program to count pairs in` `// an array whose sum is less` `// than given number x` `using` `System;` `class` `GFG {` ` ` ` ` `// Function to count pairs in array` ` ` `// with sum less than x.` ` ` `static` `int` `findPairs(` `int` `[]arr, ` `int` `n,` ` ` `int` `x)` ` ` `{` ` ` ` ` `int` `l = 0, r = n - 1;` ` ` `int` `result = 0;` ` ` ` ` `while` `(l < r)` ` ` `{` ` ` ` ` `// If current left and current` ` ` `// right have sum smaller than x,` ` ` `// the all elements from l+1 to r` ` ` `// form a pair with current l.` ` ` `if` `(arr[l] + arr[r] < x)` ` ` `{` ` ` `result += (r - l);` ` ` `l++;` ` ` `}` ` ` ` ` `// Move to smaller value` ` ` `else` ` ` `r--;` ` ` `}` ` ` ` ` `return` `result;` ` ` `}` ` ` ` ` `// Driver code` ` ` `public` `static` `void` `Main(String[] args)` ` ` `{` ` ` ` ` `int` `[]arr = {1, 2, 3, 4, 5, 6, 7, 8};` ` ` `int` `n = arr.Length;` ` ` `int` `x = 7;` ` ` ` ` `Console.Write(findPairs(arr, n, x));` ` ` `}` `}` `// This code is contributed by parashar...` |

## PHP

`<?php` `// PHP program to count pairs in an array` `// whose sum is less than given number x` `// Function to count pairs in array` `// with sum less than x.` `function` `findPairs(` `$arr` `,` `$n` `,` `$x` `)` `{` ` ` `$l` `= 0;` ` ` `$r` `= ` `$n` `- 1;` ` ` `$result` `= 0;` ` ` `while` `(` `$l` `< ` `$r` `)` ` ` `{` ` ` ` ` `// If current left and current` ` ` `// right have sum smaller than x,` ` ` `// the all elements from l+1 to r` ` ` `// form a pair with current l.` ` ` `if` `(` `$arr` `[` `$l` `] + ` `$arr` `[` `$r` `] < ` `$x` `)` ` ` `{` ` ` `$result` `+= (` `$r` `- ` `$l` `);` ` ` `$l` `++;` ` ` `}` ` ` `// Move to smaller value` ` ` `else` ` ` `$r` `--;` ` ` `}` ` ` `return` `$result` `;` `}` ` ` `// Driver Code` ` ` `$arr` `= ` `array` `(1, 2, 3, 4, 5, 6, 7, 8);` ` ` `$n` `= sizeof(` `$arr` `) / sizeof(` `$arr` `[0]);` ` ` `$x` `= 7;` ` ` `echo` `findPairs(` `$arr` `, ` `$n` `, ` `$x` `);` ` ` `return` `0;` `// This code is contributed by nitin mittal.` `?>` |

## Javascript

`<script>` `//javascript program to count pairs in an array` `// whose sum is less than given number x` `// Function to count pairs in array` `// with sum less than x.` `function` `findPairs(arr,n,x)` `{` ` ` `let l = 0, r = n-1;` ` ` `let result = 0;` ` ` `while` `(l < r)` ` ` `{` ` ` `// If current left and current` ` ` `// right have sum smaller than x,` ` ` `// the all elements from l+1 to r` ` ` `// form a pair with current l.` ` ` `if` `(arr[l] + arr[r] < x)` ` ` `{` ` ` `result += (r - l);` ` ` `l++;` ` ` `}` ` ` `// Move to smaller value` ` ` `else` ` ` `r--;` ` ` `}` ` ` `return` `result;` `}` ` ` `let arr = [1, 2, 3, 4, 5, 6, 7, 8];` ` ` `let n = arr.length;` ` ` `let x = 7;` ` ` `document.write(findPairs(arr,n,x));` `// This code is contributed by vaibhavrabadiya117.` `</script>` |

**Output**

6

Time complexity : O(n)

Space complexity : O(1)

**Using Policy Based Data structure:**

Its also works for the unsorted array

## C++

`#include <iostream>` `using` `namespace` `std;` `#include <ext/pb_ds/assoc_container.hpp>` `#include <ext/pb_ds/tree_policy.hpp>` `using` `namespace` `__gnu_pbds;` `#define ordered_set \` ` ` `tree<pair<` `int` `, ` `int` `>, null_type, less<pair<` `int` `, ` `int` `> >, \` ` ` `rb_tree_tag, tree_order_statistics_node_update>` `int` `countPair(vector<` `int` `> v, ` `int` `sum)` `{` ` ` `int` `ans = 0;` ` ` `ordered_set st;` ` ` `int` `y = 0;` ` ` `for` `(` `auto` `i = v.rbegin(); i != v.rend(); i++) {` ` ` `int` `num = *i;` ` ` `if` `(st.empty())` ` ` `st.insert({ num, y });` ` ` `else` `{` ` ` `int` `left = sum - num;` ` ` `ans += st.order_of_key({ left, -1 });` ` ` `st.insert({ num, y });` ` ` `}` ` ` `y++;` ` ` `}` ` ` `return` `ans;` `}` `int` `main()` `{` ` ` `int` `n;` ` ` `cin >> n;` ` ` `vector<` `int` `> v{ 1, 2, 3, 4, 5, 6, 7, 8 };` ` ` `int` `sum = 7;` ` ` `cout << countPair(v, sum);` ` ` `return` `0;` `}` |

**Output**

6

**Extension: **

If array is unsorted, then we can sort the array first and then apply above method to solve in O(n Log n) time.**Related Articles:**

Count all distinct pairs with difference equal to k

Count pairs with given sum**Reference: **https://www.quora.com/Given-a-sorted-integer-array-and-number-z-count-all-pairs-x-y-in-the-array-so-that-x-+-y-z-Can-it-be-done-in-O-n

This article is contributed by **DANISH_RAZA** . If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.