# Count pairs with given sum | Set 2

Given an array **arr[]** and an integer **sum**, the task is to find the number of pairs of integers in the array whose sum is equal to **sum**.

**Examples:**

Input:arr[] = {1, 5, 7, -1}, sum = 6

Output:2

Pairs with sum 6 are (1, 5) and (7, -1)

Input:arr[] = {1, 5, 7, -1, 5}, sum = 6

Output:3

Pairs with sum 6 are (1, 5), (7, -1) & (1, 5)

Input:arr[] = {1, 1, 1, 1}, sum = 2

Output:6

**Approach:** Two Different methods have already been discussed here. Here, a method based on sorting will be discussed.

- Sort the array and take two pointers
**i**and**j**, one pointer pointing to the start of the array i.e.**i = 0**and another pointer pointing to the end of the array i.e.**j = n – 1**. -
- If
- Greater than the
**sum**then decrement**j**. - Lesser than the
**sum**then increment**i**. - Equals to the
**sum**then count such pairs.

**arr[i] + arr[j]**is - Greater than the

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to return the count of pairs ` `// from arr[] with the given sum ` `int` `pairs_count(` `int` `arr[], ` `int` `n, ` `int` `sum) ` `{ ` ` ` `// To store the count of pairs ` ` ` `int` `ans = 0; ` ` ` ` ` `// Sort the given array ` ` ` `sort(arr, arr + n); ` ` ` ` ` `// Take two pointers ` ` ` `int` `i = 0, j = n - 1; ` ` ` ` ` `while` `(i < j) { ` ` ` `// If sum is greater ` ` ` `if` `(arr[i] + arr[j] < sum) ` ` ` `i++; ` ` ` ` ` `// If sum is lesser ` ` ` `else` `if` `(arr[i] + arr[j] > sum) ` ` ` `j--; ` ` ` ` ` `// If sum is equal ` ` ` `else` `{ ` ` ` `// Find the frequency of arr[i] ` ` ` `int` `x = arr[i], xx = i; ` ` ` `while` `(i < j and arr[i] == x) ` ` ` `i++; ` ` ` ` ` `// Find the frequency of arr[j] ` ` ` `int` `y = arr[j], yy = j; ` ` ` `while` `(j >= i and arr[j] == y) ` ` ` `j--; ` ` ` ` ` `// If arr[i] and arr[j] are same ` ` ` `// then remove the extra number counted ` ` ` `if` `(x == y) { ` ` ` `int` `temp = i - xx + yy - j - 1; ` ` ` `ans += (temp * (temp + 1)) / 2; ` ` ` `} ` ` ` `else` ` ` `ans += (i - xx) * (yy - j); ` ` ` `} ` ` ` `} ` ` ` ` ` `// Return the required answer ` ` ` `return` `ans; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `arr[] = { 1, 5, 7, 5, -1 }; ` ` ` `int` `n = ` `sizeof` `(arr) / ` `sizeof` `(arr[0]); ` ` ` `int` `sum = 6; ` ` ` ` ` `cout << pairs_count(arr, n, sum); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

# Python3 implementation of the approach

# Function to return the count of pairs

# from arr with the given sum

def pairs_count(arr, n, sum):

# To store the count of pairs

ans = 0

# Sort the given array

arr = sorted(arr)

# Take two pointers

i, j = 0, n – 1

while (i < j):
# If sum is greater
if (arr[i] + arr[j] < sum):
i += 1
# If sum is lesser
elif (arr[i] + arr[j] > sum):

j -= 1

# If sum is equal

else:

# Find the frequency of arr[i]

x = arr[i]

xx = i

while (i < j and arr[i] == x):
i += 1
# Find the frequency of arr[j]
y = arr[j]
yy = j
while (j >= i and arr[j] == y):

j -= 1

# If arr[i] and arr[j] are same

# then remove the extra number counted

if (x == y):

temp = i – xx + yy – j – 1

ans += (temp * (temp + 1)) // 2

else:

ans += (i – xx) * (yy – j)

# Return the required answer

return ans

# Driver code

arr = [1, 5, 7, 5, -1]

n = len(arr)

sum = 6

print(pairs_count(arr, n, sum))

# This code is contributed by Mohit Kumar

**Output:**

3

## Recommended Posts:

- Count all pairs with given XOR
- Count pairs with Odd XOR
- Count pairs with given sum
- Count pairs (a, b) whose sum of squares is N (a^2 + b^2 = N)
- Count number of pairs (A <= N, B <= N) such that gcd (A , B) is B
- Count passing car pairs
- Count of unique pairs (arr[i], arr[j]) such that i < j
- Count pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j])
- Count pairs (i,j) such that (i+j) is divisible by A and B both
- Count of pairs of (i, j) such that ((n % i) % j) % n is maximized
- Count Pairs from two arrays with even sum
- Count of pairs (x, y) in an array such that x < y
- Count pairs with bitwise OR less than Max
- Count pairs (a, b) whose sum of cubes is N (a^3 + b^3 = N)
- Count of pairs from 1 to a and 1 to b whose sum is divisible by N

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.