假设我有一系列双打,如下所示:
Array[10] = {10, 10, 10, 3, 10, 10, 6, 10, 10, 9, 10}
Run Code Online (Sandbox Code Playgroud)
我需要一个函数来确定数组中MAJORTY投票的内容,在本例中为"10",因为它是最常出现的数字......当然还有没有多数投票的情况(它们在哪里)等于),在这种情况下,我需要抛出异常......
有线索吗?除了在数组上做一些非常讨厌的循环之外(对于每个索引,确定存在多少具有相同值的数量,在数组中存储计数,然后扫描计数数组中的最高数字,并且该位置的值是赢家等...)
dfa*_*dfa 17
使用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;
}
Run Code Online (Sandbox Code Playgroud)
你的第一个问题是你有一个"双打数组",因为浮点数据的相等性是有问题的(相同的数值可以用不同的位模式来表示).如果您的双打事实上(如示例中)整数,请int改用.除此之外,请仔细考虑如何定义哪些值相等以表示相同的投票.
至于确定多数投票,使用a Map以"投票ID"作为关键字并将投票数作为值 - 然后在最后通过地图迭代以找到最大值.