2015-12-22 44 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];