Programm zum Entfernen von Duplikaten im int-Array

8

Ich habe Code geschrieben, um Duplikate aus Integer Array zu entfernen. Ich möchte keine eingebauten Schlüsselwörter / Eigenschaften verwenden.

Hier ist meine Logik:

%Vor%

Die Ausgabe sollte lauten:

  

1,2,3,4

Es gibt nicht die gewünschte Ausgabe. Jungs, das ist nicht der Homewok. Das ist Selbstlernen. Nein LINQ, Enthält das Schlüsselwort bitte. Vielen Dank für Ihre Antworten.

Danke.

    
user662285 22.08.2012, 12:43
quelle

14 Antworten

5

Da dies eine Hausaufgabe ist, würde ich Ihren Code nicht reparieren und Ihnen stattdessen ein paar Notizen geben:

  1. Sie könnten das nicht mit einer einzigen Schleife und ohne eingebaute Funktionen machen; Sie benötigen zwei verschachtelte Schleifen
  2. Wenn Sie einen doppelten Wert finden, verschieben Sie die Array-Elemente um eins nach vorn und verringern Sie die Größe des "aktiven Bereichs" des Arrays. Sie benötigen eine weitere verschachtelte Schleife, um die Verschiebung auszuführen.
dasblinkenlight 22.08.2012, 12:51
quelle
3

Hier ist ein Weg, es mit zwei verschachtelten foreach-Schleifen zu machen:

%Vor%

Wenn Sie List<int> nicht verwenden möchten, müssen Sie ein temporäres Array mit der Größe des ersten Arrays erstellen. Dann, wenn das verarbeitet wurde, müssen Sie verfolgen, wie viele Elemente Sie wirklich gefunden haben und kopieren Sie diese in ein neues Array.

    
Filip Ekberg 22.08.2012 12:56
quelle
2

Das Problem ist, dass Sie nur jedes Element mit dem vorherigen vergleichen. Da dies eine selbstlernende Übung ist, werde ich nur einen Überblick darüber geben, wie es gemacht wird und Sie die Details ausarbeiten lassen.

Sie benötigen zwei verschachtelte Schleifen:

  • Die erste Schleife iteriert über jedes Element.
  • Die zweite Schleife vergleicht das aktuelle Element mit allen anderen, die Sie bisher gesehen haben.

Beachten Sie, dass dies eine O (n 2 ) Zeit erfordert.

Sie können es mit anderen Methoden schneller machen:

  • Sortieren der Eingabe zuerst: O (n log (n)) Zeit
  • Verwendung von HashSet oder Enumerable.Distinct : O (n) Zeit.

Aber diese letzteren Ansätze sind wahrscheinlich beide nicht erlaubt, weil Sie keine eingebauten Klassen / Methoden verwenden.

    
Mark Byers 22.08.2012 12:51
quelle
0

Füllen Sie einfach das Dictionary und verwenden Sie Keys als Ergebnis-Array.

%Vor%

dict.Keys - ERGEBNIS.

    
PaulSh 22.08.2012 12:58
quelle
0

Das ist die Lösung:

%Vor%

Nun wird 1, 2, 3, 4

angezeigt     
Vishal Suthar 22.08.2012 13:03
quelle
0

Eine sehr einfache Form eines Algorithmus, der das erreicht, was Sie wollen:

%Vor%     
Razvan 22.08.2012 12:54
quelle
0

Ok, du hast gesagt, du willst nichts eingebaut haben, also lass uns alles von Grund auf machen.

Es gibt zwei Möglichkeiten (ich weiß), dies zu tun. Einer hat Komplexität O (n ^ 2) und einer hat Komplexität O (n + n * log (n)). Die zweite ist schneller, aber die erste ist einfacher.

Die langsamere (aber einfachere) Lösung: O (n ^ 2)

%Vor%

Die schnellere (aber kompliziertere) Lösung: O (n + n * log (n))

%Vor%     
riwalk 22.08.2012 12:56
quelle
0

Wenn Sie Artikel zuerst bestellen, und nachdem Sie nur mit dem nächsten vergleichen, haben Sie keine Kosten.

Algorithmus:

  1. Array bestellen

  2. foreach elem if (has_next & amp; & amp; next ist gleich) Element entfernen; nächstes

  3. Druck-Array

Wenn die Platzkosten kein Problem sind, können Sie uns hashtable struct. Aber ich denke, meine Idee ist einfacher.

    
Marc 22.08.2012 13:50
quelle
0

Sie können auch ein Wörterbuch verwenden, das schneller ist als die arrayList

%Vor%     
Just for Fun 12.09.2012 06:03
quelle
0
%Vor%     
Muhammad Mubashir 03.07.2013 07:57
quelle
0

Sie können die .Distinct () - Erweiterungsmethode wie folgt verwenden,

%Vor%     
Jatin patil 31.07.2013 06:23
quelle
0
%Vor%     
Bijender 31.07.2013 06:18
quelle
0

Ihr Ans ist:

%Vor%     
Janki 31.07.2013 07:18
quelle
-1

Diese Lösung ist in Javascript.

%Vor%     
ZeroInfinity 10.02.2013 14:20
quelle

Tags und Links