2017-04-17 197 views
-6

我有一個大小爲N的雙數組,其中元素由代碼計算。而且看起來是這樣的:如何計算一維數組中重複元素的數量?

A,B,A,A,B,C,...

所以它有重複的元素。例如,一個重複10次,B重複12次等等

我想輸出是這樣的:

一:10

B:12

這將是一個很好的算法來做到這一點?

+3

你嘗試過什麼嗎? –

+0

你允許排序數組嗎? –

+0

請參閱'std :: map',將數組中的值用作映射中的鍵,映射值將是count,如'std :: map '中的計數。 –

回答

1

如果元素是浮點數,則兩個值爲的概率完全相等非常低(由於浮點數的表示方式)。

您可能需要計算兩個數字之間的絕對差值,並與1.0E-5等一些ε值進行比較。如果差值小於ε,則認爲值相等。

一種算法是對數組進行排序。只要連續值「相等」,就增加計數器。

+0

謝謝!很好的方法來解決使用字符和地圖。 – Alireza

1
char y[] = { 'a', 'b', 'a', 'c' }; 
int count[52] = {0}; 

for (int i = 0; i < (sizeof(x)/sizeof(char)); i++) 
{ 
    if (y[i] >= 65 && y[i] <= 90) 
     count[y[i] - 'A']++; 
    else if (y[i] >= 97 && y[i] <= 122) 
     count[(y[i] - 'a') + 26]++; 
} 

for (int i = 0; i < 52; i++) 
{ 
    if (i < 26 && count[i] > 0) 
     cout << char('A' + i) << ": " << count[i] << endl; 
    else if (i >= 26 && count[i] > 0) 
     cout << char('a' + i - 26) << ": " << count[i] << endl; 
} 
+0

加一個用於提及一般用途的不同方法。我會試試這個。 – Alireza