问题是:
编写一个名为mode的方法,该方法返回整数数组中出现频率最高的元素。假设数组至少有一个元素,并且数组中的每个元素的值介于0和100之间(包括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;
,现在一切都正常了!
{27,15,15,11,27}
。counts
的长度为5,行counts [n [I]] ++
将失败,因为它将尝试增加索引为27的元素,如shridhad在评论中指出的越界了。 - phoogmap
和set
这样的数据结构一无所知。在学习和工作中,我通过几乎蛮力的方法探索了高效的算法。这改变了我的人生 :) - TonyGW