Dada una array arr[], cuente el número de pares arr[i], arr[j] tales que arr[i] + arr[j] es máximo e i < j.
Example : Input : arr[] = {1, 1, 1, 2, 2, 2} Output : 3 Explanation: The maximum possible pair sum where iMethod 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 iC++
// 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 :
3Time 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 :
3Time complexity:O(n)
Please refer complete article on Number of pairs with maximum sum for more details!
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA