如何编写一个取整数数组并返回模式的方法。如果有多个模式,则应该返回第一个模式
到目前为止,我有这个,它在大多数情况下有效,但我不知道为什么它会在第一次出现模式时返回。
public static int mode(int[] a) {
int temp,temps;
for(int i=0;i<a.length-1;i++) {
temp=countRepititions(a,a[i]);
temps=countRepititions(a,a[i+1]);
if(temp>temps) {
return a[i];
} else if(temps>temp) {
return a[i+1];
}
}
return a[0];
}
答案 0 :(得分:2)
问题:
您正在比较第一个和第二个元素的数量并返回模式而不检查完整数组(如果前两个元素不同)。
if(temp>temps) { // For 766888 temp = 1 temps = 2 and 6 is returned.
return a[i];
} else if(temps>temp) {
return a[i+1];
}
解决方案:
maxRepCount
(任何整数的最大重复计数)和maxRepIdx
(最大重复数的索引)。最后,返回a[maxRepIdx]
;
复杂性:O(n ^ 2)maxRepCount
和maxRepIdx
(O(n))遍历数组。最后,返回a[maxRepIdx]
;