假设我有一个如下所示的双打数组:
Array[10] = {10, 10, 10, 3, 10, 10, 6, 10, 10, 9, 10}
我需要一个函数来确定数组中的MAJORTY投票是什么,在这种情况下为“ 10”,因为它是出现次数最多的数字…当然,有些情况下不存在多数票(等于),在这种情况下,我需要抛出一个异常…
有什么线索吗?除了对数组进行一些非常讨厌的循环外(对于每个索引,确定有多少个具有相同值,将计数存储在数组中,然后扫描计数数组以获取最大数,并且该位置的值是赢家等)。
使用a Map<Integer, Integer>应该很简单:
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; }