2015-12-22 43 views
0

如何写这需要一个整数数组,并返回mode.If有不止一种模式,它应该返回的第一个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]; 
} 
+3

为了让回答者或其他有类似问题的人更容易,请编辑添加一个特定的问题陈述 - “不起作用”可以假设,但* how *不起作用?什么错误信息或不正确的行为是特征? –

+0

例如,程序在这种情况下不起作用:int [] c = {7,6,6,5,5,8,8,8}; - 当模式为8时,它返回6. –

+0

@DanTolson它是因为在第一个循环中只有你返回值。因此,通过比较'7'的发生和'6'的发生,它发现'6'的发生更大并且仅从那里返回值。而循环不运行furether。 –

回答

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(最大Repition计数为任意整数)和maxRepIdx在每个遍历(最大重复数的指数)。最后,返回a[maxRepIdx]; 复杂性:O(n^2)
  • 一个更简单的算法:对数组进行排序(O(nlogn)),然后用maxRepCountmaxRepIdx(O(n))遍历数组。最后,返回a[maxRepIdx];