Kann mir jemand eine iterative Lösung für das folgende Problem zeigen? Ich löste es rekursiv, kämpfte aber mit einer iterativen Lösung. (Facebook Technical Interview Frage)
%Vor%Die Lösung muss mit n-ten geschachtelten Array-Elementen arbeiten (d. h., sie muss immer noch funktionieren, wenn jemand die Array-Werte / Platzierung im obigen Beispiel ändert)
Rekursive Lösung:
%Vor%Hier ist eine Möglichkeit:
%Vor%Erklärung: Wenn Sie über eine verschachtelte Struktur iterieren, müssen Sie sich nur daran erinnern, wo Sie vorher waren, indem Sie das aktuelle Array und die Position speichern, bevor Sie in das verschachtelte Array wechseln Stapel für rekursive Lösungen).
Hinweis: Wenn Sie die Arrays placeHolder
und lastIndex
erneut verwenden, müssen Sie sie nicht jedes Mal neu erstellen. Vielleicht in etwa so:
Dies ist sogar noch schneller (für flache Iteration), und weniger Garbage-Collector-Probleme, die es viele Male aufrufen. Die Geschwindigkeit liegt sehr nahe bei der rekursiven Funktion, die in Chrome aufgerufen wird, und oft schneller als die Rekursion in FireFox und IE.
Ich habe Tomalaks Tests hier neu erstellt, da der alte jsPerf zur Bearbeitung nicht mehr funktioniert: Ссылка
Diese In-Place-Lösung ist schneller als die von Lupe, jetzt da ich alle inneren geschweiften Klammern entfernt habe (ich habe die i-- in den concat-Parameter eingefügt, um das zu tun).
Ein anderer iterativer Algorithmus:
%Vor%Wie Tomalaks JSPerf zeigt, ist das ziemlich langsam.
Ein ziemlich übersichtlicher, lesbarer Algorithmus:
%Vor%Diese Version schneidet besser ab als meine andere Antwort , ist aber immer noch deutlich langsamer als James Wilkins 'Antwort .
Tomalaks JSPerfTags und Links javascript arrays function