Reverse-ein array ohne Verwendung von Array.Reverse()
Wie du ein array (in C#), ohne mit Array.Reverse()
Methode?
Beispielsweise
int[] arr = {1,3,4,9,8};
//some code here
Console.WriteLine(string.Join(",", arr));
führen sollte
8,9,4,3,1
Habe ich diese als interview-Aufgabe.
vielleicht meinen wir, unicode... ɹɹɐ
InformationsquelleAutor Romil N | 2011-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code ersetzt werden, der statt des
//some code here
die Frage ist:Sollten Sie iterieren nur über die erste Hälfte des Arrays (
arr.Length /2
). Wenn Sie iteriert durch den ganzen array (arr.Length
), es wird Umgekehrt zweimal, wodurch das gleiche element, um als bevor er begann.InformationsquelleAutor Petar Minchev
Grundsätzlich werden Sie gefragt, zu implementieren
Array.Reverse(Array)
. Wenn man sieht, wie es ist umgesetzt im Rahmen selbst und ignorieren viele technische details rund um, werden Sie feststellen, dass es nur ruft seine drei-parameter-version (die Umkehrung bestimmten Teil eines Arrays) auf das gesamte array.Array.Reverse(Array,Int32,Int32)
ist eine while-Schleife, die swaps Elemente und unterhält zwei Indizes:i
Punkte auf das erste element des umgekehrten Teil, undj
Punkte, um das Letzte element des umgekehrten Teil.Umgeschrieben werden ersetzt, anstelle von
//some code here
in der Frage:Diese leichter zu erfassen sind als die Implementierung mit for-Schleife, macht weniger Arithmetik und der Schuss aus der gotcha mit Doppel-reversion.
Array.Reverse<T>()
führt, dass besser und ist einfacher zu Lesen. Es wurde vorgeschlagen, issue #2352.InformationsquelleAutor Palec
Okay, so weisen Sie arr2 zurück zu arr1 am Ende. Der Grundtenor ist es.
die noch nicht reverse-das original-array.
InformationsquelleAutor Kon
Gut, man kann natürlich auch einfach kopieren, um ein neues array in umgekehrter Reihenfolge.
Zur operation "an Ort und Stelle", können Sie von beiden enden gegen die Mitte: Laden Sie die ersten und letzten Elemente, dann speichern Sie Sie zurück, die erste in der letzten Position, und die zuletzt in der ersten Lage. Dann tun die zweite und die vorletzte, etc. Wenn Sie eine gerade Anzahl von Elementen, die Sie tun, N/2 Iterationen. Wenn eine ungerade Zahl, die Sie tun, (N-1)/2 Iterationen und lassen das mittlere element, wo es war.
Gibt es wohl andere algorithmen, wäre unwesentlich schneller wenn man cache-line-Größe und genügend andere Eigenschaften, aber Sie wäre es nicht Wert sein, es sei denn, Sie waren in einem wirklich performance-kritischen situation.
InformationsquelleAutor Hot Licks
Können Sie tun dies in vielerlei Hinsicht, aus dem die meisten schnell, um die meisten dumm wie:
Aber ich kann nicht verstehen, warum verfolgen Sie so eine vergebliche Suche, wenn es das ist, zu beeindrucken, jemand irgendwo, dann verwenden Sie diese anstelle der for-Schleifen 🙂
.reverse()
nicht schneiden es für diese situation 🙂Dieser code funktioniert nicht für sein Beispiel (1, 3, 4, 9, 8)!
Nein eigentlich nicht. Was diese linq-Ausdruck muss ist die Kiste ein neues array und weisen Sie auf die Adresse der variable arr. Das ist nicht die Sortierung der vorhandenen array.
Hier ist der Grund, der Sie zugewiesen sind diese "futile quest". Ja, es kann automatisch getan werden. Aber der interviewer ist nicht auf der Suche nach 'Können Sie mir sagen, die Funktion zu verwenden?' Sie sind auf der Suche für einen Kandidaten, der Griff auf die tatsächliche Arbeitsweise der Funktion. Können Sie die logischen Schritte, um dorthin zu gelangen? Im Grunde, diese Arten von Fragen beantwortet werden können in der gleichen Weise in jeder Sprache, oder in pseudocode oder in der Organisation von einem deck von physischen Karten.
InformationsquelleAutor Marino Šimić
Hallo Mohammad; der code könnte funktionieren, aber mit etwas Kontext wäre es eine bessere Antwort; zum Beispiel könnten Sie erklären, wie und warum diese vorgeschlagene änderung würde lösen der Fragesteller das problem, vielleicht mit einem link zu der entsprechenden Dokumentation. Würde, dass es mehr nützlich für Sie, und auch nützlich für andere Website-Leser, die auf der Suche nach Lösungen für ähnliche Probleme.
InformationsquelleAutor Mohammad Abdalhaleem
InformationsquelleAutor Veljko Stefanovic
Ist So Einfach Starten Sie eine Schleife Array-Modellen auferlegt und so weiter sehen-code und Sie werden verstehen,:)))
InformationsquelleAutor Javidan Akberov
probieren Sie etwas wie:
Habe ich nicht getestet, aber es sollte auf der rechten Spur. Irgendeinem Grund Sie nicht wollen, verwenden Sie Array.Reverse? Es ist wahrscheinlich eine gut optimierte version des Algorithmus.
for(int i=0,counter = 1; i < arr.Length; i++,counter++)
Das ist wirklich nützlich und auch noch nach Jahren von C# coding habe ich noch nie begegnet. Oder vielleicht habe ich doch vergessen haben, so oder so, ich fühle mich wie ich etwas gelernt heute.
Ich gefragt, diese Arten von Fragen die ganze Zeit in interviews.
diese Kisten ein neues array, anstatt wirklich die Umkehrung des Arrays.
InformationsquelleAutor Fourth
Ist es besser, verwenden Sie Array.Reverse-Methode
Lesen Sie mehr Beschreibung Hier
InformationsquelleAutor Alireza
//ohne Verwendung von Reverse-Methode und ohne die Verwendung zusätzlicher array
//try-yield-operator ausgehend vom letzten element
InformationsquelleAutor Max
Ich bin nicht gut mit Schleifen überhaupt. Aber das ist, was scheint einfach für mich -
InformationsquelleAutor Manoz
InformationsquelleAutor user3000682
Das ist meine Lösung für dieses.
InformationsquelleAutor user3963394
Ich würde lieber rückwärts ein array vom Ende. Meine Lösung oben.
InformationsquelleAutor Steve
Kann dies mit der einzigen for-Schleife..
(und genau das gleiche wie eine andere "Antwort" auf diese Frage stackoverflow.com/a/31829476/477420)
Ich habe es versucht, bevor Sie ein posting als Antwort und er erzeugt eine Ausgabe, wie erwartet, mit Komma (nicht extra). In dieser Antwort [link] (stackoverflow.com/a/31829476/477420) es gibt keine Notwendigkeit ToString() verwenden, und es auch nicht produzieren Antwort wie erwartet mit Komma(Es wird gedruckt, auf neue Zeile)
Ich habe keine Ahnung, was Sie versucht, aber der code in der post hat keine Möglichkeit zu drucken weniger Kommas als zahlen.
InformationsquelleAutor Mahesh Sutar
InformationsquelleAutor CaveGirl
Können Sie einfach Schleife rückwärts:
InformationsquelleAutor Sumit Joshi