2016-04-24 110 views
0

所以可以說我有int數組(最大是其最大尺寸)Ç重複陣列

array = { 1, 7, 22, 3, 7, ... } 

,我需要找到一個方法來計算每個元素的重複以前的數組中到另一個像這樣的

duplicates = { { 1, 2 times }, { 7, 3 times } ...} 

我知道語法數組是錯誤的,我只是想舉例說明我的目標(希望我自己的表現不夠好)..我一直在想,我不能想辦法做到這一點(也許這很簡單,但我有點新),所以我決定在這裏發佈一些指導。

在此先感謝

+0

您正在使用'C'而不是'C++'?在'C++'中編寫它會容易得多.. – Matthias

+0

是的,我正在使用C – jamez

+0

你能解釋一下你有什麼問題嗎? –

回答

1

如果內存消耗不會引起你的情況下,任何的麻煩:

定義一個struct

struct DuplicationInfo{ 
    int number; 
    int times; 
} 

然後,你可以做一個循環如下

DuplicationInfo[max] duplicates; 
// Initialze the array 
for(int i=0; i < max; i++) 
{ 
    duplicates[i].times= 0; 
    duplicates[i].number = -1; // Any invalid number which you know is not in your array 
} 

for(int i = 0; i < max; i++){ 
    // Look if the number is still in our duplicates list 
    for(int j=0; j<max;j++){ 
     if(duplicates[j].number == array[i]) 
     { 
      duplicates[j].times++; 
      break; 
     } 
     else if(duplicates[j].number == -1) 
     { 
      duplicates[j].times= 1; 
      duplicates[j].number = array[i]; 
      break; 
     } 
    } 
} 
+0

我們用max = 2^32來編譯這個例子;) – AnatolyS

+0

我知道。正如我所說,它只適用於不那麼龐大的陣列。 – Matthias

+0

我看到,您的historgam方法僅適用於不寬範圍,但作者有-MAX_INT到+ MAX_INT。 – AnatolyS

4

您可以在數組進行排序,可能與像qsort的算法,然後用forwhile循環,你可以指望每個元素有多少次出現到陣列中,因爲重複的將是一個之後。

如果你在mac/linux下鍵入終端man 3 qsort看看它應該如何使用。

1

你既可以排序數組,以便在數字後面加上一個數字的重複項,並用數字和數字來計算它們,或者可以使用具有數字和頻率字段的結構。每次你必須在陣列中插入一個新的數字,如果它已經進入數組,你只需增加一個頻率字段。