【问题标题】:Maximum Frequency Number in an array using Hashmaps使用哈希图的数组中的最大频率数
【发布时间】:2020-08-05 12:29:39
【问题描述】:

问题:

给你一个整数数组,其中包含随机顺序的数字。编写一个程序来查找并返回给定输入中出现次数最多的数字。

如果两个或多个元素争夺最大频率,则返回数组中最先出现的元素。

输入格式:

第 1 行:一个整数 N,即数组的大小
第 2 行:N 个整数,它们是数组的元素,用空格分隔

输出格式:

最频繁的元素

约束:

0

示例输入 1:

13
2 12 2 11 12 2 1 2 2 11 12 2 6 

样本输出 1:

2

输出不正确,请告诉错误。 这是代码:

#include <unordered_map>
using namespace std;


int highestFrequency(int *input, int n){
    unordered_map<int, int> map;
    int maxFreq = 0;
    for(int i = 0; i < n; i++){
        if(map.count(input[i]) > 0){
            map[input[i]]++;
            if(map[input[i]] > maxFreq){
                maxFreq = map[input[i]];
            }
        }
        map[input[i]] = 1;
    }
    for(int i = 0; i < n; i++){
        if(map[input[i]] == maxFreq){
            cout << input[i];
        }
    }

    /* Don't write main().
     * the input array is already passed as function argument.
     * Taking input and printing output is handled automatically.
     */ 
}

【问题讨论】:

  • 你应该从函数返回值,而不是打印它。 (您需要同时跟踪值(或索引)和频率。)
  • 是我自己还是你忘了在map[inpuit[i]] = 1之前加上else-statement?
  • 另外,不需要整个if(map.count(input[i]) &gt; 0) 的东西。 map[input[i]]++; 只会在还没有价值的时候起作用。

标签: c++ arrays data-structures hashmap


【解决方案1】:

我认为这是一种计算元素频率的有效方法。 unordered_map mp;

// Traverse through array elements and 
// count frequencies 
for (int i = 0; i < n; i++) 
    mp[arr[i]]++; 

// Traverse through map and print frequencies 
for (auto x : mp) 
    cout << x.first << " " << x.second << endl; 
// found the most frequent item.
 int max_count = 0, res = -1; 
for (auto i : mp) { 
    if (max_count < i.second) { 
        res = i.first; 
        max_count = i.second; 
    } 
} 

答案就是答案

【讨论】:

  • 输出所有元素,而不仅仅是最常见的...
  • @melk 我已经进行了必要的更改。
【解决方案2】:

//java解决方案

public static int maxFrequencyNumber(int[] arr){ 
    if(arr.length == 0)
        return -1;
    int maxFreq = 0;
    int number = -1;
    HashMap<Integer,Integer> map = new HashMap<>();
    
    for(int i=0;i<arr.length;i++)
    {
        if(map.containsKey(arr[i]))
        {
            map.put(arr[i],map.get(arr[i])+1);
        }
        else {
            map.put(arr[i], 1);
        }
    }
    // using set data structure
    Set<Integer> keySet = map.keySet();
    for(Integer i:keySet)
    {
        if(map.get(i) > maxFreq)
        {
            number = i;
            maxFreq = map.get(i);
        }
    }
    return number;
}

}

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 2022-10-14
    • 1970-01-01
    • 2019-02-27
    • 2017-09-14
    • 2019-01-23
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多