2016-04-24 21 views
0

So können sagen, ich habe ein Array von ints (max die maximale Größe zu sein)C Dubletten in Array

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

und ich brauche einen Weg zu finden, die Duplikate von jedem Element in der vorherigen Reihe in eine andere zu zählen Array wie dies

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

i die Syntax weiß, ist falsch, ich wollte nur mein Ziel exemplifizieren (hofft, dass ich mich geäußert gut genug) .. ich gedacht haben und ich kann nicht einen Weg finden, dies zu tun (vielleicht Es ist einfach, aber ich bin irgendwie neu in diesem), also habe ich beschlossen, hier für einige Hinweise zu posten.

Vielen Dank im Voraus

+0

Sie verwenden 'C' nicht' C++ '? Es wäre viel einfacher, dies in 'C++' zu schreiben. – Matthias

+0

ja, ich benutze C – jamez

+0

Können Sie erklären, mit was Sie Probleme haben? –

Antwort

1

Wenn der Speicher verschwenden verursacht keine Probleme in Ihrem Fall:

definieren eine Struktur

struct DuplicationInfo{ 
    int number; 
    int times; 
} 

Dann können Sie eine Schleife tun wie folgt

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

Lassen Sie uns dieses Beispiel mit Max = 2^32 kompilieren;) – AnatolyS

+0

Ich weiß. Wie gesagt das ist nur für nicht so große Arrays geeignet. – Matthias

+0

Ich sehe, Ihre Historgam-Methode eignet sich nur für nicht große Bereiche, aber der Autor haben -MAX_INT bis + MAX_INT. – AnatolyS

4

Sie das Array sortieren könnten, vielleicht mit einem Algorithmus wie qsort und dann mit einem for oder einem while Schleife können Sie zählen, wie oft jedes Element in das Array erscheinen, da die Duplikate sein werden Nacheinander.

Wenn Sie unter Mac/Linux-Typ im Terminal man 3 qsort zu sehen, wie es verwendet werden soll.

1

Sie entweder die sortieren könnte Array, um die Duplikate einer Zahl direkt hinter der Zahl zu haben und sie mit einem wile zu zählen, oder Sie könnten eine Struktur mit einem Zahlen- und Frequenzfeld verwenden. Jedes Mal, wenn Sie eine neue Nummer in das Array einfügen müssen, wenn sie bereits in das Array ist, erhöhen Sie einfach das Frequenzfeld um eins.