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 = { 123423245122334561 };
            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;
                    }
                }
            }
            
            // Ausgabe in der Console
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + " , ");
            }
            Console.WriteLine();
            Console.ReadLine();
        }


Kha - Mo 23.03.09 17:52

user profile iconSkiller-1988 hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconSkiller-1988 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconSkiller-1988 hat folgendes geschrieben Zum zitierten Posting springen:
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.