📌  相关文章
📜  查找数组中所有出现次数最多的元素的总和

📅  最后修改于: 2021-10-27 08:29:30             🧑  作者: Mango

给定一个包含重复元素的整数数组。任务是找到给定数组中所有出现次数最多的元素的总和。那是数组中频率最大的所有此类元素的总和。
例子

Input : arr[] = {1, 1, 2, 2, 2, 2, 3, 3, 3, 3}
Output : 20
The highest occurring elements are 3 and 2 and their
frequency is 4. Therefore sum of all 3's and 2's in the 
array = 3+3+3+3+2+2+2+2 = 20.

Input : arr[] = {10, 20, 30, 40, 40}
Output : 80

方法

  • 遍历数组并使用C++中的unordered_map来存储数组元素的频率,这样map的key就是数组元素,value就是它在数组中的频率。
  • 然后,遍历地图以找到最大出现元素的频率。
  • 现在,要再次遍历地图并为所有具有最大频率的元素找到和,找到frequency_of_max_occurring_element*max_occurring_element并找到它们的总和。

下面是上述方法的实现:

C++
// CPP program to find the sum of all maximum
// occurring elements in an array
 
#include 
using namespace std;
 
// Function to find the sum of all maximum
// occurring elements in an array
int findSum(int arr[], int N)
{
    // Store frequencies of elements
    // of the array
    unordered_map mp;
    for (int i = 0; i < N; i++)
        mp[arr[i]]++;
     
 
    // Find the max frequency
    int maxFreq = 0;
    for (auto itr = mp.begin(); itr != mp.end(); itr++) {
        if (itr->second > maxFreq) {
            maxFreq = itr->second;
        }
    }
 
    // Traverse the map again and find the sum
    int sum = 0;
    for (auto itr = mp.begin(); itr != mp.end(); itr++) {
        if (itr->second == maxFreq) {
            sum += itr->first * itr->second;
        }
    }
 
    return sum;
}
 
// Driver Code
int main()
{
    int arr[] = { 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 };
 
    int N = sizeof(arr) / sizeof(arr[0]);
 
    cout << findSum(arr, N);
 
    return 0;
}


Java
// Java program to find the sum of all maximum
// occurring elements in an array
import java.util.*;
 
class GFG
{
 
// Function to find the sum of all maximum
// occurring elements in an array
static int findSum(int arr[], int N)
{
    // Store frequencies of elements
    // of the array
    Map mp = new HashMap<>();
    for (int i = 0 ; i < N; i++)
    {
        if(mp.containsKey(arr[i]))
        {
            mp.put(arr[i], mp.get(arr[i])+1);
        }
        else
        {
            mp.put(arr[i], 1);
        }
    }
 
    // Find the max frequency
    int maxFreq = 0;
    for (Map.Entry entry : mp.entrySet())
    {
        if (entry.getValue() > maxFreq)
        {
            maxFreq = entry.getValue();
        }
    }
 
    // Traverse the map again and find the sum
    int sum = 0;
    for (Map.Entry entry : mp.entrySet())
    {
        if (entry.getValue() == maxFreq)
        {
            sum += entry.getKey() * entry.getValue();
        }
    }
 
    return sum;
}
 
// Driver Code
public static void main(String[] args)
{
 
    int arr[] = { 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 };
 
    int N = arr.length;
    System.out.println(findSum(arr, N));
}
}
 
// This code is contributed by Princi Singh


Python3
# Python3 program to find the Sum of all maximum
# occurring elements in an array
 
# Function to find the Sum of all maximum
# occurring elements in an array
def findSum(arr, N):
     
    # Store frequencies of elements
    # of the array
    mp = dict()
    for i in range(N):
        mp[arr[i]] = mp.get(arr[i], 0) + 1
     
 
    # Find the max frequency
    maxFreq = 0
    for itr in mp:
        if (mp[itr] > maxFreq):
            maxFreq = mp[itr]
         
 
    # Traverse the map again and find the Sum
    Sum = 0
    for itr in mp:
        if (mp[itr] == maxFreq):
            Sum += itr* mp[itr]
     
    return Sum
 
 
# Driver Code
 
arr= [1, 1, 2, 2, 2, 2, 3, 3, 3, 3 ]
 
N = len(arr)
 
print(findSum(arr, N))
 
# This code is contributed by mohit kumar


C#
// C# program to find the sum of all maximum
// occurring elements in an array
using System;
using System.Collections.Generic;
 
class GFG
{
 
// Function to find the sum of all maximum
// occurring elements in an array
static int findSum(int []arr, int N)
{
    // Store frequencies of elements
    // of the array
    Dictionary mp = new Dictionary();
    for (int i = 0 ; i < N; i++)
    {
        if(mp.ContainsKey(arr[i]))
        {
            var val = mp[arr[i]];
            mp.Remove(arr[i]);
            mp.Add(arr[i], val + 1);
        }
        else
        {
            mp.Add(arr[i], 1);
        }
    }
 
    // Find the max frequency
    int maxFreq = 0;
    foreach(KeyValuePair entry in mp)
    {
        if (entry.Value > maxFreq)
        {
            maxFreq = entry.Value;
        }
    }
 
    // Traverse the map again and find the sum
    int sum = 0;
    foreach(KeyValuePair entry in mp)
    {
        if (entry.Value == maxFreq)
        {
            sum += entry.Key * entry.Value;
        }
    }
 
    return sum;
}
 
// Driver Code
public static void Main(String[] args)
{
 
    int []arr = { 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 };
 
    int N = arr.Length;
    Console.WriteLine(findSum(arr, N));
}
}
 
// This code is contributed by Rajput-Ji


Javascript


输出:

20

时间复杂度:O(N),其中 N 是数组中元素的数量。

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程