Arrays auf doppelte Werte untersuchen



  • Hi, bin ziemlicher Anfänger und komm nicht so richtig vorwärts... :S

    Wie gehe ich am besten vor wenn ich einen Array mit Zahlen gegeben habe und nun überprüfen will, ob diese doppelt vorkommen.

    Was nicht gefragt ist, mich aber auch interessieren würde:

    Wie gebe ich diese aus?
    Wie lösche ich diese am besten?
    Kann ich diese auch so löschen, das der Platz im array nun vom nachfolgenden belegt wird?

    danke, mfg



  • Grundsätzlich haben Arrays den Nachteil, dass es eine statische Datenstruktur ist und sich daher auch nicht mehr vom Platzbedarf her ändern lässt. D.h. also, dass du deine doppelten Elemente nicht einfach aus dem Array löschen kannst, wie du das gerne hättest. Du müsstest dir also ein neues Array anlegen, in das du nur die nicht-doppelt vorkommenden Werte schreibst. Du könntest natürlich auch die Werte einfach nach vorne schieben (also doppelter wird durch nachfolgende ersetzt), aber dann hast du letztlich am Ende des Arrays ein paar Zellen, die ungenutzt sind.

    Zum eigentlich Problem: Leg dir ein zusätzliches int-Array an, das so groß ist, wie dein max. Wert ist und du keine Nullen im Array hast. Falls du doch Nullen hast, muss die Arraygröße noch um eins größer sein.

    Anschließend initialisierst du das Array mit 0 und gehst dein eigentliches Array schrittweise durch. Dann zählst du jedes Element, d.h.

    for (i = 0; i < dein_zahlenarray_size; ++i) {
      dein_zaehlarray[ dein_zahlenarray[i] ]++; /* So benutzen, falls auch 0 im Array vorkommt */
    }
    

    Wenn du dann dein_zaehlarray durchgehst und Elemente dein_zaehlarray[i] > 1 findest, weißt du, dass die Zahl i in dein_zahlenarray mehr als nur einmal vorkommt.

    Wichtig ist aber zu beachten, dass das nur gut anwendbar ist, wenn deine Zahlen im Array nicht zu groß sind (bzw. die Differenz von Min. und Max. nicht zu groß). In dem Fall solltest du dann eine andere Datenstruktur zum Zählen verwenden.



  • Wenn die Reihenfolge nicht beibehalten werden muss, einfach sortieren. Wenn die Reihenfolge beibehalten werden muss, ein zweites Array mit Zeigern auf die Werte anlegen und dieses sortieren. In beiden Fällen musst du die folgenden Elemente aber selber nachrücken. Was du am Einfachsten erreichst, wenn du sie in ein neues Array kopierst.



  • am einfachsten ist es das array zuerst zu sortieren.
    die lösung sollte dann offensichtlich sein 😉
    mit arrays aus zeigern lässt sich gut arbeiten

    Edit: wurde ja alles schon gesagt...


Anmelden zum Antworten