Entwickler-Ecke
Basistechnologien - Doppelte werte aus Array löschen
Skiller-1988 - Mo 23.03.09 17:11
Titel: Doppelte werte aus Array löschen
Hi,
welcher Algorithmus ist der "beste" bzw. intelligenteste um in einen beliebig langen int Array die doppelten Werte zu löschen und statt der gelöschten Werte anschließend das Array mit 0 auffüllen.
Allerdings möchte ich eine Lösung ohne die Klassen des .NET – Frameworks.
Meine bisherige nicht sehr überlegte Lösung :
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| int[] arr = { 12, 34, 23, 2, 45, 12, 23, 34, 56, 1 }; int del =1; for (int i = 0; i < arr.Length; i++) { for (int j = 0; j < i; j++) { if (arr[i]==arr[j] && arr[i]!=0) { arr[i] = arr[arr.Length - del]; arr[arr.Length - del] = 0; del++; break; } } } for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + " , "); } Console.WriteLine(); Console.ReadLine(); } |
Kha - Mo 23.03.09 17:52
Skiller-1988 hat folgendes geschrieben : |
Allerdings möchte ich eine Lösung ohne die Klassen des .NET – Frameworks. |
Sind wenigstens Arrays erlaubt :zwinker: ? Und wozu diese Einschränkungen?
Wenn die Zahlen nur aus einem kleinen Intervall stammen können, würde ich eine
bool[]-Lookup-Tabelle benutzen, in der du die schon vorgekommenen Zahlen einträgst. Das wäre dann ein O(n)-Algorithmus.
Skiller-1988 - Mo 23.03.09 18:30
Ich denke das Arrays ehr zur Sprache C# zählen als zum Framework naja. Die Einschränkung ist ganz einfach zu Erklären, ich will es nicht implementiern sondern es ist ne Übungsaufgabe und ich denke die gewünschte Lösung ist nicht die mit irgenteiener Klasse des .NET Frameworks.
Das mit den bool - Loopback verstehe ich nicht zu 100% wie du das meinst kannste das mal genauer erkläeren bzw. mit Code darstellen.
Kha - Mo 23.03.09 19:41
Skiller-1988 hat folgendes geschrieben : |
Ich denke das Arrays ehr zur Sprache C# zählen als zum Framework naja. |
Wenn du meinst, ok ;) . Ein
HashSet<T> kannst du natürlich auch mit Arrays nachprogrammieren, wird halt etwas aufwendig.
Skiller-1988 hat folgendes geschrieben : |
Das mit den bool - Loopback verstehe ich nicht zu 100% wie du das meinst kannste das mal genauer erkläeren bzw. mit Code darstellen. |
Wenn du auf die Zahl 3 stößst, schaust du, ob
lookup[3] true ist. Wenn ja, gab es wohl schonmal eine 3, wenn nein, setzt du es jetzt auf
true.
Das wäre wie gesagt O(n), deine erste Lösung wäre O(n²). Der Lookup ist aber eben nur bei einem kleinen Intervall sinnvoll, ein
new bool[int.MaxValue - int.MinValue] kommt nicht so gut.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!