📜  Java程序具有最大和的对数

📅  最后修改于: 2022-05-13 01:54:40.774000             🧑  作者: Mango

Java程序具有最大和的对数

给定一个数组 arr[],计算对 arr[i], arr[j] 的数量,使得 arr[i] + arr[j] 最大且 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

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 







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 solutionIf 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 maxJava// Java program to count pairs // with maximum sum.import java.io.*;class GFG {      // function to find the number // of maximum pair sumsstatic 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 SainiOutput :  3Time complexity:O(n) Please refer complete article on Number of pairs with maximum sum for more details!