一尘不染

确定数组中最常见的事件

algorithm

假设我有一个如下所示的双打数组:

Array[10] = {10, 10, 10, 3, 10, 10, 6, 10, 10, 9, 10}

我需要一个函数来确定数组中的MAJORTY投票是什么,在这种情况下为“
10”,因为它是出现次数最多的数字…当然,有些情况下不存在多数票(等于),在这种情况下,我需要抛出一个异常…

有什么线索吗?除了对数组进行一些非常讨厌的循环外(对于每个索引,确定有多少个具有相同值,将计数存储在数组中,然后扫描计数数组以获取最大数,并且该位置的值是赢家等)。


阅读 222

收藏
2020-07-28

共1个答案

一尘不染

使用a Map<Integer, Integer>应该很简单:

int mostFrequent(int... ary) {
    Map<Integer, Integer> m = new HashMap<Integer, Integer>();

    for (int a : ary) {
        Integer freq = m.get(a);
        m.put(a, (freq == null) ? 1 : freq + 1);
    }

    int max = -1;
    int mostFrequent = -1;

    for (Map.Entry<Integer, Integer> e : m.entrySet()) {
        if (e.getValue() > max) {
            mostFrequent = e.getKey();
            max = e.getValue();
        }
    }

    return mostFrequent;
}
2020-07-28