从整数数组返回模式的Java方法

时间:2015-12-22 05:09:15

标签: java

如何编写一个取整数数组并返回模式的方法。如果有多个模式,则应该返回第一个模式

到目前为止,我有这个,它在大多数情况下有效,但我不知道为什么它会在第一次出现模式时返回。

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];
}

1 个答案:

答案 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)
  • 一种更简单的算法:对数组进行排序(O(nlogn)),然后使用maxRepCountmaxRepIdx(O(n))遍历数组。最后,返回a[maxRepIdx];