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

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

具有最大和的对数的Python程序

给定一个数组 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

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" 







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 maxPython3# Python 3 program to count# pairs with maximum sum.import sys  # Function to find the number# of maximum pair sumsdef 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 Codearray = [1, 1, 1, 2, 2, 2, 3] n = len(array)print(sum(array, n))    # This code is contributed by Smitha Dinesh SemwalOutput :  3Time complexity:O(n) Please refer complete article on Number of pairs with maximum sum for more details!