Related Articles
Number of pairs with maximum sum
• Difficulty Level : Easy
• Last Updated : 26 May, 2021

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

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[0]);``    ``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

 ``

## Javascript

 ``

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[0], 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[0]);``    ``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[0], 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.``?>`

## Javascript

 ``

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.  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 industry experts, please refer Geeks Classes Live

My Personal Notes arrow_drop_up