C++ Program for Number of pairs with maximum sum
Last Updated :
13 Jan, 2022
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
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
C++
// 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;
}
Output :
3
Time complexity:O(n^2)
Method 2 (Efficient)
If we take a closer look, we can notice following facts.
- Maximum element is always part of solution
- If maximum element appears more than once, then result is maxCount * (maxCount - 1)/2. We basically need to choose 2 elements from maxCount (maxCountC2).
- 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 <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;
}
Output :
3
Time complexity:O(n)
Please refer complete article on Number of pairs with maximum sum for more details!
Similar Reads
Number of pairs whose sum is a power of 2 Given an array arr[] of positive integers, the task is to count the maximum possible number of pairs (arr[i], arr[j]) such that arr[i] + arr[j] is a power of 2. Note: One element can be used at most once to form a pair. Examples: Input: arr[] = {3, 11, 14, 5, 13} Output: 2 All valid pairs are (13,
9 min read
C++ Program to Count pairs with given sum Given an array of integers, and a number 'sum', 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
4 min read
Count maximum number of disjoint pairs having one element not less than K times the other Given an array arr[] and a positive integer K, the task is to find the maximum count of disjoint pairs (arr[i], arr[j]) such that arr[j] ? K * arr[i]. Examples: Input: arr[] = { 1, 9, 4, 7, 3 }, K = 2Output: 2Explanation:There can be 2 possible pairs that can formed from the given array i.e., (4, 1)
6 min read
Maximum sum of pairs that are at least K distance apart in an array Given an array arr[] consisting of N integers and an integer K, the task is to find the maximum sum of pairs of elements that are separated by at least K indices. Examples: Input: arr[] = {2, 4, 1, 6, 8}, K = 2Output: 12Explanation:The elements {1, 4} are K(= 2) distance apart. The sum of pairs {4,
6 min read
Find maximum Subsequence Sum according to given conditions Given an integer array nums and an integer K, The task is to find the maximum sum of a non-empty subsequence of the array such that for every two consecutive integers in the subsequence, nums[i] and nums[j], where i < j, the condition j - i <= K is satisfied. A subsequence of an array is obtai
5 min read