Autor Beitrag
Skiller-1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 100

Win XP | Debian | Ubuntu
C# | PHP | VB.NET
BeitragVerfasst: Mo 23.03.09 17:11 
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 :
ausblenden 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();
        }

_________________
~ Wer Rechtschreibfehler findet darf sie behalten ~
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 100

Win XP | Debian | Ubuntu
C# | PHP | VB.NET
BeitragVerfasst: 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.

_________________
~ Wer Rechtschreibfehler findet darf sie behalten ~
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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.

_________________
>λ=