📌  相关文章
📜  打印出现次数最多的所有和对

📅  最后修改于: 2021-05-04 10:40:07             🧑  作者: Mango

给定一个由N个不同整数组成的数组arr [] 。任务是找到出现次数最多的两个数组整数a [i] + a [j]的总和。如果有多个答案,请打印所有答案。

例子:

方法:可以按照以下步骤解决问题:

  • 遍历每对元素。
  • 使用哈希表计算每个和对出现的次数。
  • 最后,遍历哈希表并找到出现次数最多的和对。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
  
// Function to find the sum pairs
// that occur the most
void findSumPairs(int a[], int n)
{
    // Hash-table
    unordered_map mpp;
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
  
            // Keep a count of sum pairs
            mpp[a[i] + a[j]]++;
        }
    }
  
    // Variables to store
    // maximum occurrence
    int occur = 0;
  
    // Iterate in the hash table
    for (auto it : mpp) {
        if (it.second > occur) {
            occur = it.second;
        }
    }
  
    // Print all sum pair which occur
    // maximum number of times
    for (auto it : mpp) {
        if (it.second == occur)
            cout << it.first << endl;
    }
}
  
// Driver code
int main()
{
    int a[] = { 1, 8, 3, 11, 4, 9, 2, 7 };
    int n = sizeof(a) / sizeof(a[0]);
    findSumPairs(a, n);
  
    return 0;
}


Java
// Java implementation of above approach
import java.util.*;
  
class GFG 
{
  
// Function to find the sum pairs
// that occur the most
static void findSumPairs(int a[], int n)
{
    // Hash-table
    Map mpp = new HashMap<>();
    for (int i = 0; i < n - 1; i++) 
    {
        for (int j = i + 1; j < n; j++) 
        {
  
            // Keep a count of sum pairs
            mpp.put(a[i] + a[j],mpp.get(a[i] + a[j])==null?1:mpp.get(a[i] + a[j])+1);
        }
    }
  
    // Variables to store
    // maximum occurrence
    int occur = 0;
  
    // Iterate in the hash table
    for (Map.Entry entry : mpp.entrySet())
    {
        if (entry.getValue() > occur)
        {
            occur = entry.getValue();
        }
    }
  
    // Print all sum pair which occur
    // maximum number of times
    for (Map.Entry entry : mpp.entrySet())
    {
        if (entry.getValue() == occur)
            System.out.println(entry.getKey());
    }
}
  
// Driver code
public static void main(String args[]) 
{
    int a[] = { 1, 8, 3, 11, 4, 9, 2, 7 };
    int n = a.length;
    findSumPairs(a, n);
}
}
  
/* This code is contributed by PrinciRaj1992 */


Python3
# Python 3 implementation of the approach
  
# Function to find the sum pairs
# that occur the most
def findSumPairs(a, n):
      
    # Hash-table
    mpp = {i:0 for i in range(21)}
    for i in range(n - 1):
        for j in range(i + 1, n, 1):
              
            # Keep a count of sum pairs
            mpp[a[i] + a[j]] += 1
  
    # Variables to store
    # maximum occurrence
    occur = 0
  
    # Iterate in the hash table
    for key, value in mpp.items():
        if (value > occur):
            occur = value
  
    # Print all sum pair which occur
    # maximum number of times
    for key, value in mpp.items():
        if (value == occur):
            print(key)
  
# Driver code
if __name__ == '__main__':
    a = [1, 8, 3, 11, 4, 9, 2, 7]
    n = len(a)
    findSumPairs(a, n)
  
# This code is contributed by
# Surendra_Gangwar


C#
// C# implementation of above approach
using System;
using System.Collections.Generic; 
      
class GFG 
{
  
// Function to find the sum pairs
// that occur the most
static void findSumPairs(int []a, int n)
{
    // Hash-table
    Dictionary mpp = new Dictionary();
    for (int i = 0; i < n - 1; i++) 
    {
        for (int j = i + 1; j < n; j++) 
        {
  
            // Keep a count of sum pairs
            if(mpp.ContainsKey(a[i] + a[j]))
            {
                var val = mpp[a[i] + a[j]];
                mpp.Remove(a[i] + a[j]);
                mpp.Add(a[i] + a[j], val + 1); 
            }
            else
            {
                mpp.Add(a[i] + a[j], 1);
            }
        }
    }
  
    // Variables to store
    // maximum occurrence
    int occur = 0;
  
    // Iterate in the hash table
    foreach(KeyValuePair entry in mpp)
    {
        if (entry.Value > occur)
        {
            occur = entry.Value;
        }
    }
  
    // Print all sum pair which occur
    // maximum number of times
    foreach(KeyValuePair entry in mpp)
    {
        if (entry.Value == occur)
            Console.WriteLine(entry.Key);
    }
}
  
// Driver code
public static void Main(String []args) 
{
    int []a = { 1, 8, 3, 11, 4, 9, 2, 7 };
    int n = a.Length;
    findSumPairs(a, n);
}
}
  
// This code is contributed by 29AjayKumar


输出:
10
12
11