【发布时间】:2013-03-21 11:03:15
【问题描述】:
问题是:
编写一个名为 mode 的方法,该方法返回整数数组中出现频率最高的元素。假设数组至少有一个元素,并且数组中的每个元素的值都在 0 到 100 之间。通过选择较低的值来打破平局。
例如,如果传递的数组包含值 {27, 15, 15, 11, 27},您的方法应该返回 15。(提示:您可能希望查看本章前面的 Tally 程序以获得关于如何解决这个问题的想法。)
下面是我的代码,除了单元素数组之外几乎可以工作
public static int mode(int[] n)
{
Arrays.sort(n);
int count2 = 0;
int count1 = 0;
int pupular1 =0;
int popular2 =0;
for (int i = 0; i < n.length; i++)
{
pupular1 = n[i];
count1 = 0; //see edit
for (int j = i + 1; j < n.length; j++)
{
if (pupular1 == n[j]) count1++;
}
if (count1 > count2)
{
popular2 = pupular1;
count2 = count1;
}
else if(count1 == count2)
{
popular2 = Math.min(popular2, pupular1);
}
}
return popular2;
}
编辑:终于弄明白了。将 count1 = 0; 更改为 count1 = 1; 现在一切正常!
【问题讨论】:
-
+1 表示在提出问题之前做得很好(几乎可以工作,除了单元素数组)。您能否将您的解决方案发布为答案并将答案标记为正确?这样其他人就不会来帮助你的问题,认为它还没有得到回答。谢谢。
-
我回应@Simon 的评论并补充说当前接受的答案(Gubatron 的)是错误的和不正确的。例如,它将在示例输入
{27, 15, 15, 11, 27}上失败。counts的长度将为 5,counts[n[I]]++行将失败,因为它将尝试增加索引 27 处的元素,这超出了注释中的 shridhad 注释的范围。 -
我同意西蒙的观点,您会将编辑中的解决方案移至下面的答案吗?我们喜欢在这里使用问答形式。
-
将近 5 年后回顾这个问题,我很惊讶自己已经走了多远。那是我转行计算机科学的开始,我对
map和set等数据结构一无所知。几乎是蛮力的方法让我在学习和工作中探索了高效的算法。它改变了我的生活:)