# Number of pairs with maximum sum

Given an array arr[], count number of pairs arr[i], arr[j] such that arr[i] + arr[j] is maximum and i < j.

```Example :
Input  : arr[] = {1, 1, 1, 2, 2, 2}
Output : 3
Explanation: The maximum possible pair
sum where i<j is  4, which is given
by 3 pairs, so the answer is 3
the pairs are (2, 2), (2, 2) and (2, 2)

Input  : arr[] = {1, 4, 3, 3, 5, 1}
Output : 1
Explanation: The pair 4, 5 yields the
maximum sum i.e, 9 which is given by 1 pair only
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Method 1 (Naive)
Traverse a loop i from 0 to n, i.e length of the array and another loop j from i+1 to n to find all possible pairs with i<j. Find the pair with the maximum possible sum, again traverse for all pairs and keep the count of the number of pairs which gives the pair sum equal to maximum

## C++

 `// CPP program to count pairs with maximum sum. ` `#include ` `using` `namespace` `std; ` ` `  `// function to find the number of maximum pair sums ` `int` `sum(``int` `a[], ``int` `n) ` `{ ` `    ``// traverse through all the pairs ` `    ``int` `maxSum = INT_MIN; ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``for` `(``int` `j = i + 1; j < n; j++) ` `            ``maxSum = max(maxSum, a[i] + a[j]); ` ` `  `    ``// traverse through all pairs and keep a count ` `    ``// of the number of maximum pairs ` `    ``int` `c = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``for` `(``int` `j = i + 1; j < n; j++) ` `            ``if` `(a[i] + a[j] == maxSum) ` `                ``c++; ` `    ``return` `c; ` `} ` ` `  `// driver program to test the above function ` `int` `main() ` `{ ` `    ``int` `array[] = { 1, 1, 1, 2, 2, 2 }; ` `    ``int` `n = ``sizeof``(array) / ``sizeof``(array); ` `    ``cout << sum(array, n); ` `    ``return` `0; ` `} `

## Java

 `// Java program to count pairs ` `// with maximum sum. ` `class` `GFG { ` ` `  `// function to find the number of ` `// maximum pair sums ` `static` `int` `sum(``int` `a[], ``int` `n) ` `{ ` `    ``// traverse through all the pairs ` `    ``int` `maxSum = Integer.MIN_VALUE; ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``for` `(``int` `j = i + ``1``; j < n; j++) ` `            ``maxSum = Math.max(maxSum, a[i] + ` `                                    ``a[j]); ` ` `  `    ``// traverse through all pairs and ` `    ``// keep a count of the number of ` `    ``// maximum pairs ` `    ``int` `c = ``0``; ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``for` `(``int` `j = i + ``1``; j < n; j++) ` `            ``if` `(a[i] + a[j] == maxSum) ` `                ``c++; ` `    ``return` `c; ` `} ` ` `  `// driver program to test the above function ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `array[] = { ``1``, ``1``, ``1``, ``2``, ``2``, ``2` `}; ` `    ``int` `n = array.length; ` `    ``System.out.println(sum(array, n)); ` `} ` `} ` ` `  `// This code is contributed by Prerna Saini `

## Python3

 `# Python program to count pairs with  ` `# maximum sum ` ` `  `def` `_sum( a, n): ` ` `  `    ``# traverse through all the pairs ` `    ``maxSum ``=` `-``9999999` `    ``for` `i ``in` `range``(n): ` `        ``for` `j ``in` `range``(n): ` `            ``maxSum ``=` `max``(maxSum, a[i] ``+` `a[j]) ` `     `  `    ``# traverse through all pairs and ` `    ``# keep a count of the number ` `    ``# of maximum pairs ` `    ``c ``=` `0` `    ``for` `i ``in` `range``(n): ` `        ``for` `j ``in` `range``(i``+``1``, n): ` `            ``if` `a[i] ``+` `a[j] ``=``=` `maxSum: ` `                ``c``+``=``1` `    ``return` `c ` ` `  `# driver code ` `array ``=` `[ ``1``, ``1``, ``1``, ``2``, ``2``, ``2` `] ` `n ``=` `len``(array) ` `print``(_sum(array, n)) ` ` `  `# This code is contributed by "Abhishek Sharma 44" `

## C#

 `// C# program to count pairs ` `// with maximum sum. ` `using` `System; ` ` `  `class` `GFG { ` ` `  `    ``// function to find the number of ` `    ``// maximum pair sums ` `    ``static` `int` `sum(``int` `[]a, ``int` `n) ` `    ``{ ` `         `  `        ``// traverse through all the pairs ` `        ``int` `maxSum = ``int``.MinValue; ` `         `  `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``for` `(``int` `j = i + 1; j < n; j++) ` `                ``maxSum = Math.Max(maxSum, ` `                              ``a[i] + a[j]); ` `     `  `        ``// traverse through all pairs and ` `        ``// keep a count of the number of ` `        ``// maximum pairs ` `        ``int` `c = 0; ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``for` `(``int` `j = i + 1; j < n; j++) ` `                ``if` `(a[i] + a[j] == maxSum) ` `                    ``c++; ` `        ``return` `c; ` `    ``} ` `     `  `    ``// driver program to test the above ` `    ``// function ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `[]array = { 1, 1, 1, 2, 2, 2 }; ` `        ``int` `n = array.Length; ` `        ``Console.WriteLine(sum(array, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by anuj_67. `

## PHP

 ` `

Output :

```3
```

Time complexity:O(n^2)

Method 2 (Efficient)
If we take a closer look, we can notice following facts.

1. Maximum element is always part of solution
2. If maximum element appears more than once, then result is maxCount * (maxCount – 1)/2. We basically need to choose 2 elements from maxCount (maxCountC2).
3. If maximum element appears once, then result is equal to count of second maximum element. We can form a pair with every second max and max

## C++

 `// CPP program to count pairs with maximum sum. ` `#include ` `using` `namespace` `std; ` ` `  `// function to find the number of maximum pair sums ` `int` `sum(``int` `a[], ``int` `n) ` `{ ` `    ``// Find maximum and second maximum elements. ` `    ``// Also find their counts. ` `    ``int` `maxVal = a, maxCount = 1; ` `    ``int` `secondMax = INT_MIN, secondMaxCount; ` `    ``for` `(``int` `i = 1; i < n; i++) { ` `        ``if` `(a[i] == maxVal) ` `            ``maxCount++; ` `        ``else` `if` `(a[i] > maxVal) { ` `            ``secondMax = maxVal; ` `            ``secondMaxCount = maxCount; ` `            ``maxVal = a[i]; ` `            ``maxCount = 1; ` `        ``} ` `        ``else` `if` `(a[i] == secondMax) { ` `            ``secondMax = a[i]; ` `            ``secondMaxCount++; ` `        ``} ` `        ``else` `if` `(a[i] > secondMax) { ` `            ``secondMax = a[i]; ` `            ``secondMaxCount = 1; ` `        ``} ` `    ``} ` ` `  `    ``// If maximum element appears more than once. ` `    ``if` `(maxCount > 1) ` `        ``return` `maxCount * (maxCount - 1) / 2; ` ` `  `    ``// If maximum element appears only once. ` `    ``return` `secondMaxCount; ` `} ` ` `  `// driver program to test the above function ` `int` `main() ` `{ ` `    ``int` `array[] = { 1, 1, 1, 2, 2, 2, 3 }; ` `    ``int` `n = ``sizeof``(array) / ``sizeof``(array); ` `    ``cout << sum(array, n); ` `    ``return` `0; ` `} `

## Java

 `// Java program to count pairs  ` `// with maximum sum. ` `import` `java.io.*; ` `class` `GFG { ` `     `  `// function to find the number  ` `// of maximum pair sums ` `static` `int` `sum(``int` `a[], ``int` `n) ` `{ ` `    ``// Find maximum and second maximum  ` `    ``// elements. Also find their counts. ` `    ``int` `maxVal = a[``0``], maxCount = ``1``; ` `    ``int` `secondMax = Integer.MIN_VALUE, ` `        ``secondMaxCount = ``0``; ` `    ``for` `(``int` `i = ``1``; i < n; i++) { ` `        ``if` `(a[i] == maxVal) ` `            ``maxCount++; ` `        ``else` `if` `(a[i] > maxVal) { ` `            ``secondMax = maxVal; ` `            ``secondMaxCount = maxCount; ` `            ``maxVal = a[i]; ` `            ``maxCount = ``1``; ` `        ``} ` `        ``else` `if` `(a[i] == secondMax) { ` `            ``secondMax = a[i]; ` `            ``secondMaxCount++; ` `        ``} ` `        ``else` `if` `(a[i] > secondMax) { ` `            ``secondMax = a[i]; ` `            ``secondMaxCount = ``1``; ` `        ``} ` `    ``} ` ` `  `    ``// If maximum element appears ` `    ``// more than once. ` `    ``if` `(maxCount > ``1``) ` `        ``return` `maxCount * (maxCount - ``1``) / ``2``; ` ` `  `    ``// If maximum element appears ` `    ``// only once. ` `    ``return` `secondMaxCount; ` `} ` ` `  `// driver program  ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `array[] = { ``1``, ``1``, ``1``, ``2``, ``2``, ``2``, ``3` `}; ` `    ``int` `n = array.length; ` `    ``System.out.println(sum(array, n)); ` `} ` `} ` ` `  `// This code is contributed by Prerna Saini `

## Python3

 `# Python 3 program to count ` `# pairs with maximum sum. ` `import` `sys ` ` `  `# Function to find the number ` `# of maximum pair sums ` `def` `sum``(a, n): ` ` `  `    ``# Find maximum and second maximum elements. ` `    ``# Also find their counts. ` `    ``maxVal ``=` `a[``0``]; maxCount ``=` `1` `    ``secondMax ``=` `sys.maxsize ` `     `  `    ``for` `i ``in` `range``(``1``, n) :  ` `         `  `        ``if` `(a[i] ``=``=` `maxVal) : ` `            ``maxCount ``+``=` `1` `         `  `        ``elif` `(a[i] > maxVal) :  ` `            ``secondMax ``=` `maxVal ` `            ``secondMaxCount ``=` `maxCount ` `            ``maxVal ``=` `a[i] ` `            ``maxCount ``=` `1` `         `  `        ``elif` `(a[i] ``=``=` `secondMax) :  ` `            ``secondMax ``=` `a[i] ` `            ``secondMaxCount ``+``=` `1` `         `  `        ``elif` `(a[i] > secondMax) :  ` `            ``secondMax ``=` `a[i] ` `            ``secondMaxCount ``=` `1` `         `  `    ``# If maximum element appears more than once. ` `    ``if` `(maxCount > ``1``): ` `        ``return` `maxCount ``*` `(maxCount ``-` `1``) ``/` `2` ` `  `    ``# If maximum element appears only once. ` `    ``return` `secondMaxCount ` `     `  `# Driver Code ` `array ``=` `[``1``, ``1``, ``1``, ``2``, ``2``, ``2``, ``3``]  ` `n ``=` `len``(array) ` `print``(``sum``(array, n)) ` ` `  ` `  `# This code is contributed by Smitha Dinesh Semwal `

## C#

 `// C# program to count pairs with maximum ` `// sum. ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// function to find the number  ` `    ``// of maximum pair sums ` `    ``static` `int` `sum(``int` `[]a, ``int` `n) ` `    ``{ ` `         `  `        ``// Find maximum and second maximum  ` `        ``// elements. Also find their counts. ` `        ``int` `maxVal = a, maxCount = 1; ` `        ``int` `secondMax = ``int``.MinValue; ` `        ``int` `secondMaxCount = 0; ` `        ``for` `(``int` `i = 1; i < n; i++)  ` `        ``{ ` `            ``if` `(a[i] == maxVal) ` `                ``maxCount++; ` `            ``else` `if` `(a[i] > maxVal) ` `            ``{ ` `                ``secondMax = maxVal; ` `                ``secondMaxCount = maxCount; ` `                ``maxVal = a[i]; ` `                ``maxCount = 1; ` `            ``} ` `            ``else` `if` `(a[i] == secondMax) ` `            ``{ ` `                ``secondMax = a[i]; ` `                ``secondMaxCount++; ` `            ``} ` `            ``else` `if` `(a[i] > secondMax) ` `            ``{ ` `                ``secondMax = a[i]; ` `                ``secondMaxCount = 1; ` `            ``} ` `        ``} ` `     `  `        ``// If maximum element appears ` `        ``// more than once. ` `        ``if` `(maxCount > 1) ` `            ``return` `maxCount * ` `                       ``(maxCount - 1) / 2; ` `     `  `        ``// If maximum element appears ` `        ``// only once. ` `        ``return` `secondMaxCount; ` `    ``} ` `     `  `    ``// driver program  ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `[]array = { 1, 1, 1, 2, ` `                               ``2, 2, 3 }; ` `        ``int` `n = array.Length; ` `         `  `        ``Console.WriteLine(sum(array, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by anuj_67. `

## PHP

 ` ``\$maxVal``)  ` `        ``{ ` `            ``\$secondMax` `= ``\$maxVal``; ` `            ``\$secondMaxCount` `= ``\$maxCount``; ` `            ``\$maxVal` `= ``\$a``[``\$i``]; ` `            ``\$maxCount` `= 1; ` `        ``} ` `        ``else` `if` `(``\$a``[``\$i``] == ``\$secondMax``) ` `        ``{ ` `            ``\$secondMax` `= ``\$a``[``\$i``]; ` `            ``\$secondMaxCount``++; ` `        ``} ` `        ``else` `if` `(``\$a``[``\$i``] > ``\$secondMax``)  ` `        ``{ ` `            ``\$secondMax` `= ``\$a``[``\$i``]; ` `            ``\$secondMaxCount` `= 1; ` `        ``} ` `    ``} ` ` `  `    ``// If maximum element appears ` `    ``// more than once. ` `    ``if` `(``\$maxCount` `> 1) ` `        ``return` `\$maxCount` `*  ` `              ``(``\$maxCount` `- 1) / 2; ` ` `  `    ``// If maximum element  ` `    ``// appears only once. ` `    ``return` `\$secondMaxCount``; ` `} ` ` `  `// Driver Code ` `\$array` `= ``array``(1, 1, 1, 2, ` `                ``2, 2, 3 ); ` `\$n` `= ``count``(``\$array``); ` `echo` `sum(``\$array``, ``\$n``); ` ` `  `// This code is contributed by anuj_67. ` `?> `

Output :

```3
```

Time complexity:O(n)

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.

My Personal Notes arrow_drop_up Contented with little yet wishing for more

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.

Improved By : vt_m

Article Tags :
Practice Tags :

3

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.