给定一个包含重复元素的整数数组。任务是找到给定数组中所有出现次数最多的元素的总和。那是数组中频率最大的所有此类元素的总和。
例子:
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 现场工作专业课程和学生竞争性编程现场课程。