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

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



filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to count pairs with maximum sum.
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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"

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to count pairs
// with maximum sum.
  
// function to find the number
// of maximum pair sum
function sum( $a, $n)
{
      
    // traverse through all
    // the pairs
    $maxSum = PHP_INT_MIN;
    for($i = 0; $i < $n; $i++)
        for($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
    $c = 0;
    for($i = 0; $i < $n; $i++)
        for($j = $i + 1; $j < $n; $j++)
            if ($a[$i] + $a[$j] == $maxSum)
                $c++;
    return $c;
}
  
    // Driver Code
    $array = array(1, 1, 1, 2, 2, 2);
    $n = count($array);
    echo sum($array, $n);
      
// This code is contributed by anuj_67.
?>

chevron_right



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

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to count pairs with maximum sum.
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to count
// pairs with maximum sum.
  
// function to find the number
// of maximum pair sums
function sum( $a, $n)
{
    // Find maximum and second 
    // maximum elements. Also 
    // find their counts.
    $maxVal = $a[0]; $maxCount = 1;
    $secondMax = PHP_INT_MIN; 
    $secondMaxCount;
    for ( $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 Code
$array = array(1, 1, 1, 2,
                2, 2, 3 );
$n = count($array);
echo sum($array, $n);
  
// This code is contributed by anuj_67.
?>

chevron_right


Output :

3

Time complexity:O(n)



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.