Meistern des JavaScript | Teil 2: Erweiterte Zeichenfolgen und Arrays | Arnav Aggarwal | Skillshare
Drawer
Suchen

Playback-Geschwindigkeit


  • 0.5x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 2x

Meistern des JavaScript | Teil 2: Erweiterte Zeichenfolgen und Arrays

teacher avatar Arnav Aggarwal, Full-Stack Engineer & Instructor

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführung

      2:52

    • 2.

      Array Untersätze

      4:30

    • 3.

      Doppelte Array - Tief tauchen

      12:30

    • 4.

      Array Subset: Die optimale Lösung

      8:57

    • 5.

      Maximale Gewinne durch Brute Force

      7:20

    • 6.

      Maximale Gewinne: Intelligente Verarbeitung

      5:17

    • 7.

      Einzelne Mutation

      9:05

    • 8.

      Anagramme erkennen

      7:13

    • 9.

      Schnelle Anagram

      14:04

    • 10.

      Quadratische Matrix drehen

      5:41

    • 11.

      Quadratische Matrix Lösung drehen

      4:43

    • 12.

      Matrix drehen: Zwei Bonus

      4:06

    • 13.

      Matrix Rotation an Ort und Stelle - Strategie

      4:30

    • 14.

      Matrix Rotation an Ort und Stelle - Lösung

      6:16

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

129

Teilnehmer:innen

1

Projekt

Über diesen Kurs

Begleiten Sie den software Arnav Aggarwal für einen detaillierten 55-minütigen Kurs darüber, wie du verschiedene Arten von 55-minute handle

Dies ist Teil 2 einer 4-teiligen Serie.

Beherrsche das JavaScript indem du diese Reihe von sorgfältig kuratierten Interviewfragen und -lösungen durchführst. Diese Probleme stellen die Werkzeuge zur Verfügung, die du brauchst, um jede Frage in einem Interview zu begegnen.

Wir werden besprechen, wie du Algorithmen verfeinern kannst. Wir gehen über clevere, fortgeschrittene Möglichkeiten der Datenmanipulation, nach denen Interviewer suchen. Du wirst in deinem Problem die Lösung und das Interviewen von Fähigkeiten mehr erfahren und sicherer machen.

Teile 3 - 4 werden in den nächsten Wochen veröffentlicht!

Triff deine:n Kursleiter:in

Teacher Profile Image

Arnav Aggarwal

Full-Stack Engineer & Instructor

Kursleiter:in

Arnav is a full-stack developer from San Diego, CA. He started his journey by attending a coding boot camp and has been working professionally for years since. Arnav has taught at a coding boot camp and tutored web development as well,  giving him a deep understanding of how developers learn to code. He's passionate about all things JavaScript and sharing the knowledge he's collected.

Vollständiges Profil ansehen

Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Einführung: Mein Name ist Sarnoff und ich bin ein kompletter Software-Ingenieur und Engineering-Instruktor. Ich habe Software Engineering in einem Coding Boot Camp erzählt, und etwas, das ich immer wieder bemerkt habe, war, dass Studenten, obwohl extrem hell und in der Lage, leistungsstarke, dynamische Websites zu bauen , waren nicht bereit für die Arten von Fragen, die sie in ihren Interviews gesehen. Nachdem ich beobachtet hatte, wie diese Schüler mit typischen Interviewfragen kämpfen, beschloss ich, Fragen zu erstellen und zu sammeln, die die Schüler in ihren Interviews sehen könnten. Und ich habe sie ausgehändigt. Es war zusätzliche Übung für die Schüler zu versuchen. Sie erzählten mir immer wieder, wie sehr die Probleme ihnen geholfen haben, die Löcher in ihrem Wissen zu sehen und sie mit den Fähigkeiten, die sie brauchten, fielen. Dieser Kurs ist der Höhepunkt dieser Fragen. Fast alle diese Probleme sind Variationen von Fragen, die mir selbst gestellt wurden oder die andere, die ich kenne, in Interviews gestellt wurden. Nun, Sie werden diese genauen Fragen nicht in Ihren Interviews sehen. Die Strategien, die Sie lernen, indem Sie unsere Öffentlichkeit lösen, sind für fast jedes Problem anwendbar , das Sie gegeben werden. Hier ist die allgemeine Struktur des Kurses wird typischerweise mit der Erstellung eines Brute-Force-Algorithmus beginnen , der das Problem gut löst, dann verfeinern, bis wir Zeit oder Raum Komplexität oder beides optimieren können. Am Ende des Kurses haben Sie mehrere algorithmische Strategien gemeistert, die Sie auf eine Vielzahl von Problemen anwenden können . Wir lernen Wege, die Algorithmen, die wir entwickeln, kritisch zu analysieren und zu finden, drehen Sie sie, um die Zeit zu reduzieren, die sie benötigen. Das ist genau das, wonach ein Interviewer gesucht hat. Es gibt ein paar Voraussetzungen für diesen Kurs. Ähm, zuerst sollten Sie grundlegende Kenntnisse über JavaScript und die Fähigkeit haben, sinnvollen Code damit zu schreiben . Sie sollten auch mit Basic ES 2015-Konzepten, solchen Null-Funktionen und den Schlüsselwörtern Let und Const vertraut sein. Sie sollten eine Vorstellung davon haben, was die Begriffe, Zeit und Raumkomplexität bedeuten. Es ist in Ordnung, wenn Sie nicht genau wissen, was sie sind, da wir sie für jede Lösung detailliert finden werden. Der Code-Editor, den ich in meinen Videos verwende, ist Ripple. Uh, Sie können dorthin gelangen, indem Sie den Rebel Punkt i t Slash Sprachen Slash Javascript, und der Grund, warum ich das benutze, ist, weil es einfach und funktional ist, und lassen Sie uns auf Ihren Code konzentrieren, aber Sie sind natürlich, frei, jeden Code-Editor zu verwenden, den Sie mögen. Das Projekt für diesen Kurs besteht darin, eines der Probleme auszuwählen, die in der Klasse behandelt werden. Es gibt insgesamt fünf hier aufgelistet und teilen Sie Ihre eigene Lösung. Es gibt 1000 Möglichkeiten, eines dieser Probleme zu lösen, und die Klasse wird davon profitieren, Ihre Version zu sehen . Willkommen auf dem Kurs. Ich freue mich, Ihnen beizubringen, was ich weiß und Ihnen dabei helfen zu können, Ihre Interviews zu unterstützen. Wann immer du bereit bist, sehe ich dich beim ersten Problem. 2. Array: Das nächste Problem ist eine Ray-Teilmenge für dieses Problem. Unsere Funktion wird zwei Argumente erhalten, die beide eine Erhöhung sein werden, und diese Arrays werden nur Zahlen und Strings enthalten. Unser Ziel ist es herauszufinden, ob das zweite Array eine Teilmenge der ersten ist ein und was das bedeutet, dass wir zurückkehren möchten. Wahr. Wenn jedes Element im zweiten Array auch in der 1. 3 gefunden wird, haben wir hier ein paar Hinweise. Wie üblich, Dieses Problem hat ein paar verschiedene Lösungen mit unterschiedlichen Zeitkomplexitäten, und wir gehen voran und decken alle von ihnen. Und einer der Schlüssel zu diesem Problem ist, wie man mit den Wiederholungen umgeht, wenn ein Element zwei- oder dreimal vorhanden ist . Hier sind einige Beispiele für diese 1. 1 Die gleichen Elemente sind in beiden einer Erhöhung vorhanden, die gleichen genauen Artikel nur in einer anderen Reihenfolge. Wir wissen also, dass die zweite eine Teilmenge der ersten in der nächsten These ist und Array 12 und drei hat , und das erste Array hat ein zusätzliches, so dass es immer noch unsere Bedingungen in der nächsten erfüllt. Das zweite Array hat eine Drei, die das erste Array nicht. Also wollen wir das. Wir möchten, dass unsere Funktion False zurückgibt. Für diesen und den nächsten Fall haben wir noch zwei zusätzliche. Also wieder falsch und dann die 3. 1 Obwohl die Elemente, die Anzahl der Elemente ist die gleiche , diese drei Elemente nicht in der ersten Rate erscheinen. Nur einer von den anderen tut es. Also wieder, wir wollen falsche Rückkehr. Versuchen Sie das Problem und gehen Sie weiter und drücken Sie „Play“, wenn Sie es zumindest versucht haben. Lasst uns loslegen. Also, wie immer, werden wir eine Schleife brauchen. Aber welchen Weg wollen wir? Eine Schleife über. Nun, wir möchten sicherstellen, dass jedes Element im zweiten Array im ersten vorhanden ist. Alles, was uns wirklich wichtig ist, ist jedes Element in der sekundären. Die 1. 1 könnte ein paar Extras haben, die uns nicht wichtig sind. Zum Beispiel dieses hier. Es scheint also, als wäre es eine bessere Idee, die 2. 1 zu durchlaufen und was wollen wir hier drinnen machen ? Nun, was auch immer wir gerade sind, wir wollen es im ersten Array im Superset suchen. Also hier verwenden wir nur den Index der Methode, um zu finden, wo in der Supermenge dieses Element existiert. Wenn es krank ist. Wenn dies nicht der Fall ist, dann ist Super Index gleich negativer und wir können sofort false zurückgeben. Was das bedeutet, ist, dass es ein Element im zweiten Array gibt, nicht in der 1. 1, also wissen wir, dass es nicht kann. Die 2. 1 kann möglicherweise keine Teilmenge sein, so dass wir sofort false und am Ende der Funktion zurückgeben können. Und wenn alles gut läuft, wollen wir wahr zurückkehren. Lassen Sie uns voran gehen und testen Sie diese Funktion aus und wir bekommen nicht ganz, was wir erwarten, dass diese funktionieren. Das hier funktioniert. Wir bekommen den Waffenstillstand von falschen und dann zwei Wahrheiten. Diese beiden Bedingungen scheitern also. Werfen wir einen Blick auf das hier. Nun, eine einfache Bedingung, die wir sofort herausfinden können, ist, dass eine Teilmenge kleiner oder gleich der Größe ihres Supersatzes sein muss . Wenn also die Subventionen immer größer werden, dann wissen wir, dass es keine echte Teilmenge sein kann. Also lasst uns weitermachen und darüber nachgehen. Es läuft wieder, und das war vorbei. Wir werden hier eine Falsche bekommen, aber wir müssen dieses Stück immer noch hier passieren lassen, und es gibt keinen einfachen Weg, das zu umgehen. So ist unsere Funktion hier fast abgeschlossen. Aber es gibt eine wichtige Sache, die wir tun müssen, und das ist. Behalten Sie die Anzahl der angezeigten Elemente im Auge, und wir werden dies in der nächsten Lektion tun. 3. Double Array – Tief tauchen: Willkommen zurück zur Array-Teilmenge. Wir sind fast fertig mit unserer Funktion. Alles, was wir tun müssen, ist, diesen Fall hier im Moment scheitern zu lassen. Es besteht den Test und wir werden wahr kommen von unserer Funktion zurück. Was wir brauchen, ist falsch zurückkommen, weil dieses Array keine Teilmenge dieses Arrays ist. Wie können wir das tun? Nun, im Moment, was Schleife tut, ist, dass es dieses zweite Array durchläuft und jedes Element verarbeitet wenn es dieses zum ersten Mal sieht. Es sucht nach ihm in diesem Array und es sagt, es ist da. Es findet es großartig. Es geht weiter in der Schleife und kommt wieder zur nächsten. Es blickt im ersten Array nach vorne und findet es und findet genau das gleiche. Und da steht: OK, OK, wir sind gut zu gehen und das macht es noch einmal. Wir müssen ihm sagen, dass es diesen Artikel nicht zweimal betrachten kann und nicht mehrmals auf den gleichen Artikel schauen kann. Wenn ein Element mehr als einmal in der Teilmenge auftaucht, muss es zumindest die Anzahl der Male im Super-Set auftauchen Nun, eine Sache, die wir dio können, es ist einfach die Elemente löschen, die wir im Super-Set finden, die das Problem lösen würden. Zum Beispiel, was ist die Funktion sucht nach dieser und sie findet sie hier, wenn sie gefunden wird. Wir können es einfach aus dem Array löschen. Das nächste Mal, wenn es von ihm aussieht, sucht es nach dem, den es dort nicht findet und false zurückgibt. Also lassen Sie uns voran gehen und Code, dass wir zuerst nicht direkt ändern wollen, dieses Array gegeben wurden , Also lasst uns eine Kopie davon machen. Tut mir leid, Super-Kopie. Und mit dem Spread-Operator ist das alles, was wir tun müssen, um eine Kopie dieses ersten Arrays zu erstellen. Und lassen Sie uns versuchen, dies erneut auszuführen und alle unsere Tests bestehen diese funktionale Arbeit. Lassen Sie uns voran und schauen Sie sich die Zeit und die Raumkomplexität an. Also für die Zeit werden wir dieses M nennen, und zu diesem Zweck haben wir tatsächlich zwei verschiedene Variablen. Daher müssen wir unsere Zeitkomplexität in Bezug auf beide dieser Variablen beibehalten. Hier haben wir und alle von em. Ah, wir haben ein Nein von em Prozess, das ein Array kopiert, braucht, was wir tun müssen, ist Zehenschleife durch das Array zu haben und jedes einzelne Element zu kopieren. Das ist also eine lineare Operation hier in dieser Schleife, wir beginnen mit über N für sekundäre und hier sind wir tatsächlich haben wir eine andere Schleife in einem vorherigen Problem erwähnt. Index von ist eine Schleife und wir schleifen uns über super, was in unserem Fall M ist Also haben wir nicht o von m hier, weil sie in einer Schleife sind. Wir multiplizieren sie zusammen und wir bekommen alle von em mal n und weil O von m mal n ein Faktor größer ist als dieser, den wir nach können. Gehen Sie voran und ignorieren Sie dies, weil es für die Raumkomplexität unbedeutend ist. Wir erstellen ein neues Array, indem wir das Original kopieren. Es wird also o von M sein. Es gibt einen anderen Weg, dies zu lösen, und es wird unsere Zeitkomplexität ein wenig verbessern. Lasst uns weitermachen und daran arbeiten. Also, anstatt so zu arbeiten, wo wir durch die Teilmenge schleifen und dann versuchen, sie zu finden, als der Supersatz stand , indem wir Zehenschleife durch jeden einzeln gehen und zählen, damit wir dieses Top behalten können, brauchen wir keine von dies mehr und wird die Rückkehr an der Unterseite wahr halten. Also haben wir diese Strategie früher angewendet, aber was wir tun werden, ist ein Objekt zu schaffen, um diese Zahlen zu verfolgen. Ich werde dieses Vieh einfach etikettieren. Was wir also tun, ist, dass wir zuerst das Super-Set durchlaufen und dieses Objekt aufbauen, bis wir fertig sind. Was wir wollen, dass dieses Objekt haben soll, ist eine Darstellung jedes Elements, das hier drin ist, korrekte Zählungen bedeutet. - also Das ist alsoder Fall. Die CIF-Anweisung ist der Fall, in dem auf eine Zeichenfolge oder Zahl zum ersten Mal kommen . Also, wenn es das erste Mal ist, wollen wir ihm einen Wert von eins geben. Wenn wir es schon mal gesehen haben, wollen wir es nur erhöhen, okay? Und das ist alles, was wir mit dieser Schleife umgehen wollen. Diese Schleife enthält eine korrekte Anzahl aller Elemente hier. Und lasst uns das einfach aussperren, um sicherzugehen, und wir werden es mit nur zwei versuchen. Dieser letzte Artikel hier. Also führen wir dieses Beispiel direkt hier aus, und wir durchlaufen dieses Array und das sieht richtig aus. Wir sehen, dass man einmal erscheint und drei einmal erscheint und nur um absolut sicher zu gehen. Fügen wir noch drei hinzu. Dann laufen Sie es wieder und wir sehen drei zweimal. Das sieht so aus, als würde es funktionieren. Ordnung. Gehen wir voran und schleifen wir durch das zweite Array. - Also hier verarbeiten wir einen Artikel in unserer Teilmenge, und wir versuchen, sicherzustellen, dass er in unserem Kontoobjekt gefunden wird. Wenn wir es noch nicht gesehen haben, was bedeutet, dass dies undefiniert ist. Wir wissen, dass wir etwas Präsident haben, die Teilmenge, die wir nicht im Superset haben. Denn wenn wir das taten, wäre es in diesem Objekt durch diese Schleife gespeichert worden. Also, wenn dies genau hier der Fall ist, können wir voran gehen und falsch zurückgeben. jedoch Wenn esjedochnicht undefiniert ist, wollen wir nur seinen Wert um eins verringern. Dies wird also unser Konto verringern. Was passiert? Eins. Die Zahl wird auf Null. Was wir hier tun, ist, wenn der Graf Null erreicht, wir löschen das Element vollständig aus unserem Objekt aus der Zählung. Auf diese Weise, wenn wir diesen Artikel erneut verarbeiten, gehen wir durch diese Schleife und werden in diesen Fall eingehen. Das bedeutet, dass wir öfter in der Teilmenge auf dieses Element gestoßen sind, als wir im Superset haben , was bedeutet, dass es kein Waffenstillstand verärgert ist, und wir können falsch zurückgeben. Versuchen Sie zu versuchen, den Kopf um das zu wickeln. Lassen Sie uns voran gehen und nochmals zählen, nur um sicherzustellen, dass es am Ende der zweiten Schleife gut funktioniert . Also erwarten wir zu sehen, mal sehen, , wir sehen falsch, weil es falsch ist. Okay, ändern wir das ein bisschen und machen es 123 Also, was wir sehen sollten, ist ein leeres Objekt. Und das ist genau das, was wir tun. Sehen Sie, da diese Schleife Disarray verarbeitet und diese Schleife verarbeitete Disarray, sie haben sich im Wesentlichen gegenseitig abgebrochen. Elemente wurden hinzugefügt und Konto und dann durch diese Schleife entfernt direkt hier. Also sollten wir sehen, dass nichts herauskommt, und das sieht so aus, als ob es so funktioniert, wie wir es erwarten. Lassen Sie uns voran gehen und diese ausführen und sehen, ob unsere Funktion korrekt funktioniert und wir immer noch ein True hier drüben bekommen . Warum ist das so? Äh, hat das nicht geändert und es funktioniert genau so, wie wir es erwarten. Schauen wir uns die Zeitkomplexität für diesen an. Also haben wir ein O von in diesem Fall gehen wir zu den Super-Sets, alle von em. Und nichts hier drin ist eine Schleife. Und hier haben wir ein O von N. Dann ist nichts hier drin eine Schleife. Also diesmal, weil diese Schleifen aufeinander liegen und wir nicht einen in einem anderen haben, anstatt sich zu multiplizieren. Was wir tun werden, ist, diese beiden zusammen hinzuzufügen, also bekommen wir O von M plus n für die Raumkomplexität. Wir speichern jeden Artikel im Superset in diesem Zählobjekt. Also, das wird nur o von M. bleiben also funktioniert diese Lösung perfekt. Und das nächste Video werden wir weitermachen und herausfinden, wie wir dieses Problem lösen können, wenn wir hier nicht nur Strings und Zahlen in unseren Arrays gegeben werden. Aber wir werden diese Arbeit für jede Art von Eingabe machen, die die nächste Lektion sehen. 4. Array Die optimale Lösung: Willkommen zurück im letzten Video, haben wir es geschafft, das Array-Teilmengenproblem zu lösen. Unsere Lösung ist hier unten und es funktioniert nicht für jedes Beispiel hier. Und es wird für jedes Beispiel funktionieren, in dem wir beide Zahlen verwenden. Dies ist eine Art von Ich entschuldige mich, sollte ich sagen, oder es funktioniert für jede Eingabe, in der wir ihm entweder Zahlen oder Strings geben. In diesem Fall sind sie alle Nummern hier unten. Aber es würde funktionieren, wenn wir sie durch Strings ersetzen, genau das gleiche. Und das ist der Schlüssel. Unsere Lösung funktioniert nur für Zahlen und Strings. Wenn wir versuchen, Objekte zu verwenden, eine Erhöhung oder Funktionen sind unsere Funktion hier wird zusammenbrechen und lassen Sie uns über gehen. Warum beachten Sie, dass wir alle unsere Informationen hier in einem Objekt speichern? Objekte sind großartig, aber sie haben ein kleines Manko. Und lassen Sie uns darüber reden, was das ist. - Alles, was ich hier getan habe, ist ein Objekt zu erstellen und dann zu versuchen, 33 Schlüsselwertpaare zu erstellen, eines mit einem Objekt, eines mit einer Zeichenfolge und eines mit einer Zahl. Alles, was ich hier getan habe, ist ein Objekt zu erstellen und dann zu versuchen, 33 Schlüsselwertpaare zu erstellen, eines mit einem Objekt, Und wenn wir lange Widerspruch einlegen, bekommen wir genau das hier. Dies ist nicht das hilfreichste Also lassen Sie uns tatsächlich jedes Element einzeln protokollieren und wir sehen diese hier, so dass das korrekt funktioniert. Lassen Sie uns auch hier statt des Tals einloggen. Lassen Sie uns voran und protokollieren Sie den Typ des Schlüssels und bemerkte, dass jedes Mal, wenn wir String bekommen , dies ist die Fliege sprach. Immer wenn wir Klammern mit einem Objekt verwenden, um entweder eine Variable zu setzen oder auf etwas zuzugreifen, passiert intern, dass dieses Element, was auch immer zuerst ist , in eine Zeichenfolge umgewandelt wird. Also wird dieses Objekt direkt hier in das String-Objektobjekt konvertiert. Und das ist zufällig, wie diese Plattform Ripple entscheidet, sie zu verwenden. Andere könnten es einfach eine Zeichenfolge mit dem Wortobjekt nennen. Oder es könnte etwas anderes sein. Es könnte sogar diese String-Klammerklammer sein, aber hier ist es Objektobjekt, und es ist in der Tat ein String 25 wird auch in einen String umgewandelt. Anstatt tatsächlich die Zahl 25 zu sein, was hier reingeht, ist die Zeichenfolge 25. Nun, wenn wir mehrere Objekte haben und wir versuchen, beide zu verwenden, mal sehen, was passiert. Das Problem ist, dass diese beiden, obwohl ihre unterschiedlichen Objekte. Wie wir hier sehen können, haben wir klar zwei getrennte Objekte gemacht. Sie werden beide in das gleiche String-Objektobjekt genau hier gezwungen. Und das bedeutet, dass einer von ihnen einfach nicht eingefügt wird. Vielmehr fügen wir dies ein und dann überschreibt dies es vollständig. Nur um Ihnen zu zeigen, dass das passiert, bekommen wir auch ein Objekt. Dies wurde also im Wesentlichen von unserem Objekt entfernt. Ok, wir haben das mit. Lassen Sie uns voran gehen und besprechen, wie wir das tatsächlich beheben können. Also statt eines Objekts hier, werden wir etwas anderes verwenden. Wir werden ein E S 2015 Konstrukt verwenden, das eine Karte genannt wird. Nun, eine Karte ist im Grunde das gleiche wie ein Objekt, außer es. Anstatt String seinen Schlüsseln zu trotzen, wird es sie so halten, wie sie sind. Es ist also ein Objekt, das Schlüsselwertpaare enthält, und jeder Wert kann als Schlüssel verwendet werden, nicht nur um die Verwendung von nur ziemlich einfach zu zeichnen. Sie können voran gehen und die Dokumentation lesen, um die Methoden zu lernen, aber dieses Beispiel hier wird Ihnen alles geben, was Sie darüber wissen müssen. Und wie wir die Methoden verwenden, wird sowieso über sie sprechen. Also lasst uns voran gehen und direkt eintauchen. Statt eines Objekts, um eine Karte zu erstellen, verwenden wir neue Mathematik, um nach einem Element zu suchen, anstatt zu überprüfen. Wenn es nicht definiert ist, verwenden wir eine Methode namens hat und wir brauchen dies nicht. Wenn das Element in unserer Karte vorhanden ist, wird dies true zurückgeben. Wenn nicht, wird es falsch sein. Anstatt ein Schlüsselwertpaar auf diese Weise einzustellen, machen wir es anders. Wir verwenden Set, und das erste Element, das wir geben, wird sein, was wir setzen wollen, was wird. Tut mir leid, es wird der Schlüssel sein, den wir gerne setzen würden. Das wird also der aktuelle Artikel sein. Und dann die Anzahl der wollen wir es in diesem Fall eins geben. müssten wir auch ändern. Und was legen wir einen zweiten Wert? Nun, wir wollen es machen. Wir wollen es auf den aktuellen Wert plus eins setzen. Mir wurde gerade klar, dass das ein Ausrufezeichen haben muss, denn wir versuchen hier zu überprüfen und zu sehen. Wir versuchen sicherzustellen, dass unsere Karte diesen Artikel noch nicht enthält. Wenn es das Element nicht hat, möchten wir seinen Wert auf eins setzen. Und wenn es den Gegenstand hat, wollen wir ihn um eins erhöhen. Das ist also richtig. zu unserer zweiten Schleife gehen, können wir es tatsächlich durch dieses ersetzen, genau so, wie es ist, weil wir versuchen, genau dasselbe zu überprüfen . Dies hier kann durch eine kleine Änderung ersetzt werden. Anstatt also einen hinzuzufügen, wie wir hier tun, wollen wir einen subtrahieren. Um diese Anzahl von Elementen zu verringern, erhalten wir seinen aktuellen Wert, der einen subtrahiert und seinen neuen Wert auf diese Zahl hier setzt , anstatt darauf zuzugreifen, wie wir es mit einem Objekt tun würden, werden wir nur die geeignete Gebirgsmethode. Und hier verwenden wir die Methodenkarte, Doc löschen und wir wollen einfach, oops, aktuelles Element übergeben oops, und das sollte hoffentlich funktionieren. Wir erhalten genau die gleichen Werte wie wir erwarten, also sieht es so aus, als ob es funktioniert. Ich ermutige Sie, diese zu ändern und sie mit Objekten, Arrays, Funktionen, Strings und Zahlen zu versuchen Arrays, Funktionen, Funktionen, , alle im selben Beispiel. Diese neue Funktion, die wir hier haben, sollte für alles funktionieren, was Sie ihm geben. Die Zeit- und Raumkomplexität bleibt gleich. Eine Karte ist im Grunde äquivalent zu einem Objekt, nur mit dieser neuen hinzugefügten Funktion, bei der die Schlüssel keine Strings sein müssen. Das war's. Wir sehen uns im nächsten Video. 5. Maximale Gewinne über Brute Force: Willkommen zum nächsten Problem. Maximale Gewinne für dieses Problem. Wir werden eine Reihe von Zahlen gegeben, die die Preise einer Aktie vom Anfang des Tages bis zum Ende des Tages darstellen . Zum Beispiel, angesichts dieses Arrays hier, begann die Aktie zu einem Preis von 10 und endete zu einem Tag zu einem Preis von neun. Und es ging durch diese in Ordnung an jenem Tag und ging durch diese Preise. Unser Ziel ist es, den maximalen Gewinn zu finden, indem Sie einmal kaufen und einmal an einem einzigen Tag verkaufen . Aus diesem Array wollen wir den maximalen Gewinn finden, den wir erzielen können. Es gibt keine Shorting, was bedeutet, dass Sie kaufen müssen, bevor Sie verkaufen und wenn kein Gewinn erzielt werden kann. Zum Beispiel, wenn der Aktienkurs nur den ganzen Tag gesunken ist und das sah aus wie 10 98765 Dann anstatt eine negative Zahl zurückzugeben, wollen wir nur Null zurückgeben, um anzuzeigen, dass kein Gewinn möglich ist. Gehen wir weiter und fangen Sie wie gewohnt an. Wir werden unsere vier Schleife brauchen und was wir tun wollen. Wir beginnen mit der Brute-Force-Strategie, was bedeutet, jeden möglichen Gewinn, den wir erzielen können, zu berechnen und dann den größten, den wir finden, zurückzugeben . Und lassen Sie uns darüber nachdenken, wie das geht. Also, wenn wir es gekauft 10 und verkauft bei sieben, wir sind Gewinn wird negativ sein drei. Und das wollen wir irgendwo aufbewahren. Wenn wir sehen, wenn wir es 10 kaufen und mit fünf verkauften, wäre unser Gewinn negativ. Fünf kaufte es 10 und verkaufte es acht. Und weiter und weiter. Wir würden nicht viel Geld verdienen, wenn wir mit 10 kaufen. Zerstöre Sieben. Also durch seine sieben verkaufen bei fünf. Unser Prophet ist negativ, um sieben zu kaufen. Zelle um acht. Gewinne eins von seinen sieben Sell it 11 Gewinne für den Start gut aussehen. Wir werden das einfach weiter und weiter durchgehen, bis wir jeden einzelnen möglichen Gewinn erzielen und dann den höchsten zurückgeben. zu tun, bemerkte, dass wir, als wir mit 10 begannen, dann jedes von diesen verarbeiten mussten. Als wir mit sieben begannen, mussten wir jede davon gewinnen. Also brauchen wir eine Schleife in dieser Schleife. Ich vergesse, was diese Schleife hier haben wird, denke ich das Gleiche. Preise beginnen Länge nach oben. Ich sehe, dass dies gleich einem I plus eins sein muss, weil wir nach der Position beginnen und jeden dieser möglichen Gewinne speichern wollen . Wir wollen ein Array erstellen. Und hier drin, alles, was wir tun müssen, ist den Gewinn zu berechnen und ihn am Ende in das Array zu setzen, wir wollen das Maximum zurückgeben. Also, was wir tun können, ist die Funktion math dot max und math zu verwenden. Nicht Max nimmt mehrere Zahlen ein, so viele, wie Sie es geben möchten, und es wird nur die maximale Anzahl zurückgeben. Also hier drinnen können wir unsere Gewinne verteilen. Ah, eine Sache, die ich hier vergessen habe, wir wollen das mit Null beginnen. Also, wenn wieder, wenn die Preise Luft nur nach unten gehen, gehen von , sagen wir, 928642 Männer, egal wo wir kaufen, egal wo wir verkaufen unser Gewinn wird negativ sein. Mit diesem hier, Versicherer, dass Mathe Dot Max mindestens Null jedes Mal bekommen. Das löst also den Zustand, den wir bereits erwähnt haben. Wo, wenn kein Gewinn erzielt werden kann, wollen wir zurückkehren. Null. Lasst uns das testen. Wir benutzen einfach die Serie hier und wir erwarten, dass sechs gut aussehen. Okay, lassen Sie uns über die zeitliche Komplexität in der Raumkomplexität dieses Problems sprechen. Also haben wir eine Schleife, die durch unser Recht geht und wir haben eine andere Schleife, die nicht das Ganze bereits, sondern einen Teil der Theorie durchläuft . Das wird definitiv Oh, von Ende sein . Und dieser wird auch oh, von n sein, obwohl es nicht durch das gesamte Array geht. Im Durchschnitt durchläuft diese Schleife tatsächlich die Halbtheorie. Zum Beispiel, beginnend mit 10 J wird durch fünf Zahlen gehen, beginnend bei sieben. Es wird durch vier gehen, beginnend bei fünf. Es geht da drei und dann zwei und dann eins. Der Durchschnitt dieser Zahlen ist die Hälfte der Länge dieses Arrays, also ist dies technisch und mehr als zwei. Aber wir lassen Konstanten fallen, so dass beide 1/2 Ende, oh, Ereignis wird oh, . Und weil diese Schleifen ineinander liegen, multiplizieren wir. So bekommen wir O von n für Raumkomplexität quadriert. Wir schieben diese Anzahl von Preisen in unser Gewinnfeld. Das muss also jedes einzelne Ding speichern, das dieser Lou produziert. Das wird also eigentlich auch o von M quadriert sein. Sie werden gleich sein. Wir haben nicht darüber geredet. Und das wird eigentlich auch sein, oh von und quadriert, weil Mathe auf Max als Schleife an sich, es muss durch das gesamte Array suchen und uns die größte Zahl bei Funden geben. Und die Größe des Arrays, wie erwähnt, ist vorbei und quadriert. Oder es ist proportionales Thio des Endes quadriert. Das selbst wird also o n quadriert sein. Und wir würden dies zu dem Wert hinzufügen, den wir von der Schleife bekommen haben, und das bringt uns oh, von zwei und quadriert. Und wir lassen Constance immer fallen. Das könnte also einfach weggehen uns mit O von n quadriert lassen, was wir anfangs hatten. Wie auch immer, wir begannen mit über und Quadrat und landeten dort, so dass das im Wesentlichen nichts für uns ändert. Das war die Brute-Force-Lösung. Und im nächsten Video gehen wir über ein viel schnelleres 6. Maximale Gewinne: Intelligente Bearbeitung: im letzten Video haben wir dieses Problem mit einer Brute-Force-Lösung gelöst. Wir berechnen jeden möglichen Gewinn, der erzielt werden kann, und geben einfach den maximalen zurück . Gehen wir weiter und versuchen es auf eine andere Art und Weise. Lassen Sie uns also darüber nachdenken, was wir tun könnten, um dies in einem einzigen Durchgang zu tun. Lassen Sie uns versuchen, das zu O zu bekommen, und momentan ist es und quadriert, und wir haben es geschafft, sie zu immer und ein paar Mal vor. Mal sehen, ob wir es diesmal schaffen. Nun, wie berechnen Sie einen Gewinn? Sie nehmen eine Zahl und sorry, Sie nehmen eine Zahl und subtrahieren dann eine Zahl davor. Wie bekommst du so mit acht? Wie erzielen wir den größtmöglichen Gewinn aus dem Verkauf bei acht? Nun, wir schauen auf die links, und wir würden die niedrigste Zahl finden, die wir können. Es ist nicht zehn. Es ist nicht sieben. Es ist fünf. Der maximale Gewinn, den wir hier machen können, ist drei. Schauen Sie sich 11 an. Wie finden wir den bestmöglichen Gewinn heraus, den wir aus dem Verkauf mit 11 erzielen können? Nun, das wäre, die große Zahl hier drin zu finden. Entschuldigung. Die kleinste Zahl hier drin und Verkauf. wir mit fünf verkaufen, können wir das in Code verwandeln, wenn wir nur die kleinste Zahl verfolgen, die wir bisher gesehen haben . Wenn wir uns dann bewegen, subtrahieren wir die Zahl, die wir finden, von dieser Zahl. Lassen Sie mich Ihnen zeigen, was ich meine. Also verwenden wir hier nur zwei Variablen, um diese beiden Werte in unseren Schleifenmännern zu verfolgen . Der Preis, den wir annehmen werden, ist unendlich und wir werden ihn aktualisieren, sobald wir angefangen haben. Loop und Max Profit wird Null annehmen und wir werden es aktualisieren, wann immer wir müssen. - Wir sorgen nur dafür, dass das funktioniert. - Das tut es. Das ist eigentlich unsere ganze Lösung. Lasst uns nochmal durchlaufen, was wir tun. Wir gehen davon aus, dass der Mindestpreis bei Unendlichkeit beginnt. Also sagen wir nur im Grunde, fügen Sie eine Unendlichkeit hier in diese Schleife ein. Wir werden das aktualisieren, wann immer wir Teoh brauchen. Also, während wir das durchziehen, werden wir es aktualisieren. Unendlichkeit ist eigentlich nicht hier, also fangen wir bei 10 an. Und wir sagen, der Mindestpreis, auf den wir bisher gekommen sind, ist der niedrigere Männerpreis oder der aktuelle Preis. Also, die untere von Unendlichkeit oder 10, wird es offensichtlich 10 sein. So erreichten die Männer die Preise jetzt. Versuch Max, Gewinn wird die aktuelle Zahl sein, die wir verarbeiten, abzüglich des Mindestpreises, den wir bisher gesehen haben . Das folgt unserer Regel. Wir behalten diese beiden in unserer Schleife im Auge und aktualisieren sie, wann immer wir brauchen . Am Ende haben wir Max Profit bereits in unserer Variablen gespeichert und schwächen. Einfach zurückgeben, dass es wirklich die einfache Zeit und Raum ist. Wir haben eine Double for-Schleife in eine einzige Schleife verwandelt. Und keiner dieser Operationen nimmt eine beträchtliche Menge an Zeit in Anspruch. Sie sind dort nicht linear oder etwas höher, nur konstante Zeitoperationen. Sie werden es also nicht ändern. Und wir werden CEO eines O von N Zeitkomplexität Erster Raum. Mal sehen, was wir aufbewahren. Wir speichern hier zwei Variablen. Und egal wie groß das Leid ist, wir müssen nicht mehr Daten speichern als diese beiden Variablen. Das ist also, nachdem ich von N Quadrat zu eins herunterfallen werde. Dies ist die Lösung, die den Interviewer gewinnen würde. Es ist schwierig und zeigt die Fähigkeit, logisch mit Zahlen und Zeit umzugehen. Es ist elegant, kurz und süß, und hat die beste Zeit und Platz Komplexität für ein Problem wie dieses wieder vorstellbar, Nur durch den Überblick über ein paar Zahlen durch ihre Funktion und ein wenig Klugheit, können wir unten sowohl unsere Raum- und Zeitkomplexität erheblich werde ich im nächsten Video zu sehen. 7. Einzelne Mutation: Es ist Problem wird einzelne Mutation sein. Wir werden eine Funktion schreiben, die zwei Strings aufnehmen wird, und wir müssen feststellen, ob die beiden Strings identisch sind, mit Ausnahme von möglicherweise einer Mutation. Es gibt drei Arten von Mutationen, und das sind Beziehungen Einfügen und Substitution Ins. Eine Löschung ist nur die Erweiterung eines einzelnen Zeichens und Einfügungen. Das Einfügen eines einzelnen Zeichens und einer Ersetzung ist eine Zeichenänderung, wobei die Zeichenfolgen die gleiche Länge haben. Am Ende, gehen Sie weiter und versuchen Sie es auf eigene Faust und kommen Sie zurück, wenn Sie bereit sind. Lassen Sie uns voran und starten Sie dieses Problem, also wollen wir mit dem Schreiben einer Schleife beginnen. Aber worauf sieht das gut aus? Sieht aus wie? Nun, bei jedem Schritt wollen wir im Grunde genau das gleiche Element und beide Strings vergleichen. Wenn wir also diese Zeichenfolge durchlaufen, wollen wir hier das erste Zeichen mit dem ersten Zeichen vergleichen, das zweite Zeichen hier mit dem zweiten Zeichen hier und so weiter und so weiter. Mal sehen, wie wir das machen würden. Der Schlüssel verwendet tatsächlich eine andere Art von Schleife als wir bisher gesehen haben. Nun, es ist immer noch eine for-Schleife, aber es wird ein wenig anders strukturiert sein. Gehen wir weiter und schreiben Sie die Bedingungen auf. Koma. Das mag wie eine seltsame Schleife erscheinen, aber es ist absolut legal. Lasst uns durch das gehen, was hier passiert. Wir deklarieren zwei Variablen, und unsere Bedingung ist Es ist ziemlich eine Standardbedingung. Wir haben gerade Ihre Aussage da drinnen gemacht. Also, wenn einer von diesen wahr ist, wenn einer von ihnen wahr ist, wird unsere Schleife fortgesetzt und am Ende wurden zwei verschiedene Variablen implementiert. Die beiden haben wir am Anfang erklärt. Aber wir werden besprechen, warum wir das tun, während wir es durchmachen. Wir wollen also auch eine Variable erstellen, um die Anzahl der Mutationen zu verfolgen, die wir bisher haben . Und wir beginnen Null und hier drin, im Grunde, wenn wir mit Strings eins nach 11 Zeichen nach dem anderen durchgehen wollen und die Anzahl der Mutationen betrachten wollen. Also, wie können wir sagen, ob es eine Mutation gibt? Nun, lassen Sie uns überprüfen, ob die Zeichen gleich sind. Wenn die Zeichen genau gleich sind, wollen wir nichts tun und wir wollen mit der Schleife weiter. Aber wenn sie anders sind, wollen wir etwas tun. Wenn sie also nicht gleich sind, wissen wir, dass wir eine Mutation haben, damit wir die Schule vorantreiben und das erhöhen können. Und jetzt müssen wir bestimmen, welche Art von Mutation es ist. Ist es ein Löschen und Einfügen, oder ist es eine Substitution? Also haben wir Mutationen erhöht und es gibt einen weiteren Scheck, den wir eigentlich dio-wollen. Also haben wir Mutationen implementiert, und wenn wir es bereits wissen, müssen wir, können wir sofort falsch zurückgeben, wenn nicht selbst. Es ist die erste Mutation. Dann ist das, was wir tun wollen. Hier sagen wir also, dass die Länge des ersten Artikels größer ist als die Länge des zweiten Artikels. Dies könnte also ein Beispiel für dieses oder dieses sein. Also, wenn sie gleich sind, wollen wir Ament tatsächlich die zweite Variable deppen. Und lassen Sie uns erklären, warum IHS dies als Beispiel nehmen. Also vergleichen wir A und A in unserer Schleife und sie sind identisch. Wir vergleichen B und C, und das sind tatsächlich verschiedene Zeichen. Also werden wir in diese Schleife Mutationen werden eins werden. Wir werden das überspringen, weil die Mutation gleich eins ist, und wir gehen hier rein. Also werden wir J. verringern und das ist der Index genau hier. Also sind wir beim nächsten in beiden, und wir werden den Index für die zweite Saite verringern und ihn nach unten bringen . Also wieder, für die erste Zeichenfolge, wo bei B für die zweite Zeichenfolge, wo bei einem Gehen wir zur nächsten Iteration der Schleife und diesem Traum gehen wir weiter zu sehen. Und in dieser Zeichenfolge wollen wir auch sehen So im Wesentlichen, wir haben die zweite Zeichenfolge wieder auf Kurs bekommen, indem wir diese Operation genau hier durchführen, vergleichen wir C zwei c, obwohl sie an verschiedenen Indizes sind und dann gehen wir weiter. Da sie identisch sind, erhöhen wir beide Indizes erneut. Und de wie das gleiche ist tief. Also sind wir gut zu gehen. Wir wissen, dass wir nur eine einzige Mutation hatten, und jetzt können wir wahr zurückkehren und wir sind hier fast fertig. Aber was wollen wir tun, wenn es stattdessen eine Einfügung gibt? Nun, in diesem Fall, dann wird String eins kürzer sein als eine Zeichenfolge zu, und wir tun in diesem Fall, zum Beispiel, für diesen, wollen wir eigentlich ein Deck Ament, die andere Variable, und das wird uns wieder auf Kurs bringen. Sie können das alleine durchmachen und diese Logik ausarbeiten. Aber es funktioniert. Das ist die ganze Funktion. Lasst uns weitermachen und es testen. Wir gehen weiter und benutzen das. Also hier erwarten wir, wahr zu sehen. Nun, das versucht, eines von jedem von ihnen wieder zu rennen. Wahr. Und lassen Sie uns versuchen, das hier einen Fehler gemacht hat, und es ist wahr. Und um sicherzustellen, dass es funktioniert, versuchen wir auch etwas, das nicht funktioniert. Sollte nicht funktionieren. Also hier haben wir zwei Ergänzungen, also sollte dies falsch sein, und wir sehen, dass es falsch ist. Versuchen wir es. Substitution ist stattdessen so ein BCD wird ein x x x d. Und wieder werden wir falsch. Und lasst uns versuchen, wieder falsch zu löschen. Das funktioniert also. Gehen wir weiter und gehen Sie durch die Zeit- und Raumkomplexitäten für diese Funktion. Also in der für die gingen von I gleich Null auf die Länge der Zeichenfolge. Die Strings I und J, wir verwenden nur eine Schleife hier und in dieser Schleife, keine dieser Operationen sind linear thes Luft, alle konstanten Zeitoperationen, also werden sie nicht die Zeit der Komplexität unserer Schleife ändern. Wir müssen nur herausfinden, was die Zeitkomplexität dieser einzigen Schleife ist, und sie wird linear sein. Also im Allgemeinen die Saiten. Wir werden ähnliche Länge ziemlich ähnlich sein. Und so können wir sagen, N ist nur die Länge einer beliebigen Zeichenfolge. In diesem Fall hier wird die Zeitkomplexität einfach sein, oh von N. Sie können argumentieren, dass wir doppelt so viele durchmachen, weil wir es mit beiden Variablen zu tun haben, I und J aber das würde nur multiplizieren Sie dies mit zwei, und wir werden die Konstante sowieso loswerden, Also das würde uns mit einer Zeitkomplexität von o von n verlassen und was ist die Raumkomplexität? Nun, egal wie lange diese Strings sind, wir speichern nur drei Variablen I J und Mutationen. Das wird also tatsächlich eine Hoffnung sein, die geholfen hat. Und ich hoffe, das macht Sinn und ich werde im nächsten Video sehen 8. Anagramm erkennen: Sie alle Anagramme. Die Anweisungen hier sind, ein Array von Strings aufzunehmen und zurückzugeben. True, wenn alle diese Zeichenfolgen Anagramme voneinander sind, bedeutet Anagramme, dass sie dieselben Zeichen in der Zeichenfolge haben, aber sie können in einer anderen Reihenfolge vorliegen. Hier sind einige Beispiele, diese drei sind alle Anagramme voneinander. Sie alle enthalten a, B, C und D, und sie sind nur in einer anderen Reihenfolge. Im nächsten Beispiel haben wir hier ein X, was bedeutet, dass sie nicht alle Anagramme sind, also möchten wir, dass die Funktion False zurückgibt und die nächsten beiden denen ziemlich ähnlich sind. Probieren Sie es selbst aus und beginnen Sie mit der Lösung hier. Also, wie erwähnt ein Anagramm oder besser gesagt, Anagramme, unsere Strings, die die gleichen Zeichen haben, aber vielleicht in einer anderen Reihenfolge. Also, was ist eine Möglichkeit, herauszufinden, ob zwei Strings Anagramme sind? Wir könnten jedes Zeichen berücksichtigen, und wir könnten diese Zählungen am Ende überprüfen, sobald wir die Strings verarbeitet haben. Aber es gibt einen Weg, der ein bisschen einfacher ist, und wir werden so gehen. Zuerst können wir diese Zeichen tatsächlich sortieren. Zum Beispiel, wenn wir ein B c D sortieren, wird es genau so bleiben, wie es ist. Wenn wir diesen nächsten Ring sortieren, wird er zu einem B C. D und tun das gleiche für diesen, und es wird auch ein BCD. Die Strings nach dem Sortieren alle zur exakt gleichen Zeichenfolge. Wenn wir also Anagramme voneinander sortieren, sollten sie alle genau dieselbe Zeichenfolge werden, und wir können dies zu unserem Vorteil nutzen. Lasst uns weitermachen und anfangen. Also, wo wird jede Zeichenfolge in unserem Strahl mit der Map-Funktion sortieren? Also haben wir eine Zeichenfolge und wir wollen sie zuerst in ein Array aufteilen. Also, jetzt haben wir eine Reihe von Zeichen. Dann verwenden wir die Sortierfunktion, und dann verbinden wir diese Zeichen wieder zu einem Array, und dies wird die Strings enthalten, alle Arten von zusammen. Stellen wir sicher, dass wir das richtig verstanden haben, und das wird mit diesem getestet. Hoppla, das sieht richtig aus. Also, nein, wir müssen es tun. Gehen wir durch diese Strings und eine Schleife, und wir müssen sicherstellen, dass sie alle gleich sind, wie wir bereits gesagt haben, und wir müssen dies bei Null beginnen wollen. Es tut uns Leid. Das ist unsere ganze Lösung. Und um sicherzustellen, dass es noch funktioniert, werden wir wahr. Lassen Sie uns das alles versuchen. Also tun sie eins nach dem anderen hier, erwarten wir falsch hier, wir erwarten wahr. Und hier erwarten wir wieder falsch und das funktioniert. Und was ist mit der Zeit- und Raumkomplexität? Für die Zeit müssen wir dies in Bezug auf zwei verschiedene Variablen betrachten. Normalerweise verwenden wir einfach n und wir sagen über und oder in Quadrat oder was auch immer. Aber hier werden wir sagen, s ist die Länge der Strings und A wird die Anzahl der Strings im Rennen oder nur die Länge des Arrays sein. Dies liegt daran, dass die Zeit- und Raumkomplexität extrem von diesen beiden Variablen abhängt . Es macht nur Sinn, beide zu benutzen. Wenn wir über diese zeitlichen Komplexitäten, Zeit- und Raumkomplexitäten sprechen. Also die Zeitkomplexität. Lasst uns das hier durchgehen. Wir haben eine Schnur, nicht geteilt. Also wieder, eine Karte ist eine Schleife. Das wird also schon ein Ach sein, da wir uns über das Array bewegen und dann wird alles, was wir hier drin machen, damit multipliziert werden, weil es innerhalb der Schleife ist. So wird das Sortieren einer einzelnen Zeichenfolge s mal Log of s eine Sortierung Operation wird im Allgemeinen genommen, um n mal lang vom Ende zu sein und hier wird die Länge unserer Zeichenfolge sein. Sie wieder zu verbinden, wird es sein, Oh, von S, was die Länge der Saite wieder ist, also können wir diese tatsächlich zusammen hinzufügen. Also Split ich denke, ich habe den geteilten Teil komplett vergessen, der auch nur s so sein wird, um s mal Log of s zum Sortieren und s wieder für den Beitritt als plus s lange sonst plus s Und wir können das tatsächlich vereinfachen und zu einer Zeit zu s plus Begriffen Log von dieser und dieser gesamte Begriff kann tatsächlich verschwinden, weil s mal log of s höherer Ordnung ist als ja. Da diese beiden verschiedene Variablen sind und wir, müssen wir beide behalten. Dies ergibt ein mal s mal log of s für unsere Zeit, Komplexität. Und was ist mit dem Weltraum? Nun, wir speichern eine ganze Reihe von Gegenständen und dieses Array wird die gleiche Länge haben wie unsere ursprüngliche Valerie. Also, das wird oh, von einer Länge des Arrays sein. Und jede dieser Saiten wird tatsächlich die gleiche Länge wie die ursprünglichen Saiten haben. Es wird also eine Zeit sein. Es liegt daran, dass wir die gleichen Zahlenzeichenfolgen speichern, dann die Strings. Wir werden das gleiche Glied sein. Das ist also unsere Zeit in der Raumkomplexität für die Lösung. Im nächsten Video werden wir über eine andere Lösung gehen und versuchen, beide ein wenig zu verbessern. Wir sehen uns dort. 9. Schnelle Anagram: Willkommen zurück zu allen Anagrammen. Im letzten Video haben wir eine Lösung geschrieben, die bei einer Sortierung jede der Strings und dann bestimmen, ob die Strings alle gleich waren. Hier werden wir ein wenig an unserer Lösung arbeiten und diese Zeit- und Raumkomplexitäten herunterbringen , die im letzten Video etwas unhandlich aussahen. Anstatt zu sortieren, werden wir eine andere Strategie ausprobieren, und diese Strategie wird das Vorkommen jedes einzelnen Charakters aufzählen. So, zum Beispiel, unter der Serie wollen wir ein Objekt erstellen, das uns sagt, wie viele von jedem Zeichen in dieser Zeichenfolge sind. Wir werden das Gleiche für die nächste Zeichenfolge tun wollen und sicherstellen, dass diese beiden Objekte gleich sind oder dass sie genau gleich aussehen und dasselbe für diese dritte Saite tun und weiter und weiter. Und wir müssen nur sicherstellen, dass diese Objekte, die unsere Charaktere verfolgen, für jede einzelne Zeichenfolge im Array genau gleich aussehen . Lasst uns weitermachen und loslegen. Also werden wir einen Lupas brauchen. Und was wollen wir hier drinnen machen? Nun, wir möchten ein Objekt mit den Zeichenzahlen der Zeichenfolge erstellen. Und wie machen wir das? Nun, und wir haben das schon ein paar Mal getan, wenn wir anfangen müssen, ein Objekt zu erstellen und dann handeln wir. Du wirst noch eine Schleife brauchen. Diese Schleife wird so aussehen. - So ziemlich unkompliziert. Wir haben das schon mehrmals getan. Dies ist nur eine Schleife, die dieses Objekt mit den Zeichenzahlen der Zeichenfolge füllt , die wir übergeben. Wenn es das erste Mal ist, dass wir den Charakter verarbeiten, dann wird er noch nicht in unserem Objekt sein. Und wenn wir danach suchen, werden wir undefiniert. Dann wollten wir seinen Wert auf eins setzen. Wenn es bereits eine Zahl bedeutet, existiert es bereits in unserem Objekt. Wir wollen diese Zahl nur um eins erhöhen. Wir können das etwas aufräumen, nur um es leichter zu lesen. Und nur um sicherzustellen, dass wir das richtig gemacht haben, lasst uns log-Objekt konsul. Also, es mit nur diesen drei Saiten zu laufen, und das sieht so aus, als ob es genau so funktioniert , wie wir es gut wissen wollen. Also haben wir dieses Objekt und was wollen wir damit machen? Nun, wir wollen es mit einem anderen Objekt für eine andere Zeichenfolge vergleichen. Und wie bekommen wir dieses Objekt? Nun, schwächen, tun Sie das einfach vor der Vier-Schleife. Also hier in unserer Schleife können wir tatsächlich mit Punkt eins beginnen, was bedeutet, dass wir mit dieser Zeichenfolge beginnen werden. Und bevor wir die Schleife tatsächlich starten, können wir weitermachen und das Objekt für diese allererste Zeichenfolge erstellen. Im Wesentlichen möchten wir ein Objekt für die erste Zeichenfolge erstellen. Und das wird eigentlich nur all dieser Logik folgen, außer anstelle der Zeichenfolge wird dies Strings Null sein. Nein, Was wir hier haben, ist, dass wir im Wesentlichen den gleichen Code zweimal ausgeschrieben haben. Eine gute Sache wäre, dies in eine andere Funktion zu extrahieren, damit wir voran gehen und das tun können . Es wird uns helfen und reinigen Sie es für Zitat ein wenig. - Und das sollte funktionieren, damit wir diese loswerden und einfach unsere neue Funktion nutzen können. Ich kann all das und die Benutzerfunktion nicht wieder loswerden. Nein, wir vergleichen. Das Objekt würde hier mit dem generierten Objekt erzeugen erscheinen, das für die erste Zeichenfolge sein wird . Wir müssen sicherstellen, dass jede Eigenschaft in diesen Objekten äquivalent ist. Und wir müssen das tatsächlich mit einer anderen Schleife machen. - Fast da. Nun, das sollte funktionieren. Lasst uns weitermachen. Und wir sind dran, nur um sicherzustellen, dass wir aus der Wahrheit kommen. Lassen Sie uns versuchen, dieses wird wahr und falsch. Das sieht so aus, als ob es funktioniert. Also haben wir gesehen, dass unsere Funktion für diese vier funktioniert. Aber lassen Sie mich Ihnen ein Beispiel zeigen, wo unsere Funktion tatsächlich das falsche Ergebnis zurückgibt. Also, wenn wir hier ein Knie hatten und wir es laufen, brauche ich einen Kommentar diese aus. Wir erwarten Stürze, weil dies ein zusätzliches e hat, was bedeutet, dass diese drei keine Anagramme sind, aber wir werden wieder wahr. Und das liegt daran, was wir hier tun, ist, dass wir zuerst ein Objekt für die erste Figur erstellen . Zählen Sie die erste Zeichenfolge, die wir bekommen. Entschuldigen Sie mich. Das Objekt wird also so aussehen. Es hat ein durch e und jeder hat einen. Das ist es, was wir jetzt hier drinnen wollen. Wie Sie sehen können, fehlen wir die so haben wir das e in der ersten Zeichenfolge, aber nicht auf den 2. 2 Saiten, und wir können das alles hier sehen. Nun, das Problem ist in dieser Schleife, alles, was wir tun, ist Rückkehrer, die nach den Zeichen suchen, die wir in diesen beiden Objekten sehen. Also überprüfen wir, ob ein in Haaren gleich Zehe eins ist und es B gleich eins ist. C ist gleich eins, und D ist gleich eins. Wir überprüfen nicht, ob es keine Extras gibt. Also, das passiert tatsächlich, ist eine Überprüfung, die es nicht sollte. Und es gibt ein paar Dinge, die wir tun können, um das zu umgehen. Was wir tun werden, ist wahrscheinlich eines der einfachsten und eines der am wenigsten zeitintensiven . Also werden wir einfach weitermachen und das tun. Und was wir tun möchten, ist eine weitere Schleife zu erstellen, um durch die Zeichenfolge zu gehen. Entschuldigung. Gehen Sie durch das Array und stellen Sie sicher, dass alle Strings die gleiche Länge haben. Einfach genug, wir beginnen bei einem und gehen gegen das Ende und stellen Sie sicher, dass alle Längen Artikel Also wieder , wir wissen, dass dies falsch zurückkehrt, und wir bekommen falsch zurück. Also haben wir unseren Code korrigiert. Das ist es. Das ist unsere ganze Funktion. Lassen Sie uns durch die Zeit- und Raumkomplexität gehen. Also für die Zeit würde mit dem Top Live beginnen wir hier haben. Wir haben eine Menge von einem Wir schleifen durch das gesamte Array und stellen sicher, dass Strings die gleiche Länge haben. Das ist also nur eine Schleife durch das Array hier unten. Lassen Sie uns die Zeitkomplexität herausfinden. Vergessen Sie die Anzahl der Autos. Wir gehen durch eine Schleife und verarbeiten jedes Zeichen in der Zeichenfolge. Es wird also eine Standardschleife geben, die einen Link nimmt, der Zeit proportional zur Länge der Zeichenfolge benötigt. Also wird es Oh, von s geben , das bedeutet, diese ganze Sache ist Oh, von s, das hier wird über ein sein, da es eine Schleife über das gesamte Array ist, und dann wird das und hier über s so wird dies in einer mal s Dieses hier ist auch von s Also ist es o von acht mal zwei s, aber die Konstante wird fallen gelassen. Also bekommen wir nur eine von s , und das ist unser letztes Mal. Komplexität für den Raum. Nein, egal, wie groß die Strings sind A ist Alles, was wir tun, ist nur ein paar Variablen zu erstellen, die wir erstellen. Ich schaffen wir ersten Autorat. Das ist ein Objekt. Lassen Sie mich die loswerden. Es ist, damit ich uns nicht verwirre. Also hier I Diese ganze Schleife wird nur ein sehr Ich deklarieren So können wir ignorieren, dass Dies hier wird Oh, von s sein , weil wir ein Objekt haben, das mit den Zeichenzahlen einer Zeichenfolge gefüllt ist und diese Objektgröße proportional zur Länge dieser Zeichenfolge. Es wird also ein Nove hier drin geben. Wir können eine Variable I erstellen, die signifikant war. Und hier schaffen wir eine andere Variable, Oh, von der auch über s sein wird. Es ist ein Objekt, das proportional zur Länge dieser Zeichenfolge ist. Also und in dieser Vier-Schleife machen wir nichts, äh, mit Raum. Wir erstellen hier keine Objekte oder Variablen überhaupt. Wir haben also ein Nein von s und ein anderes o von s. Und diese werden zusammen addiert, weil dies für die Länge der Funktion für die Länge der verbleibenden Funktion bleibt . Und dieses Objekt wird hier generiert, wenn wir die Schleife starten und dann gelöscht, sobald die Schleife endet. Also diese Schleife Onley erzeugt eines dieser Objekte auf einmal, also höchstens zu einer Zeit, wurden O von s plus s Raum verwendet, was uns auf s gibt, was bis zu O von s vereinfacht. also höchstens zu einer Zeit, wurden O von s plus s Raum verwendet, was uns auf s gibt, was bis zu O von s vereinfacht. Raumkomplexität für diese Funktion. Sehen Sie sich die nächste Lektion an. 10. Drehung einer Square: -Problem. Drehen, Matrix, Matrix und Java-Skript kann als Array einer Erhöhung dargestellt werden. Und hier ist ein Beispiel. Wir haben ein einzelnes äußeres Array, das durch diese Klammer in dieser Klammer hier und hier bezeichnet . Wir haben drei Arrays, jedes mit drei Elementen in ihnen, und dies stellt eine drei mal drei Matrix dar. Unser Ziel ist es, eine Funktion zu schreiben, die diese Eingabe übernehmen wird. Die Eingabe wird also dieses Array von Arrays sein und gibt eine neue Matrix aus. Wir wollen also, dass die Funktion ein Array einer Erhöhung zurückgibt und diese neue Matrix, die zurückgegeben sollte die gleiche sein wie diese um 90 Grad gedreht. Dies sollte sowohl für quadratische als auch für rechteckige Matrizen funktionieren. Also im Grunde sieht große Größen für das Beispiel diese Matrix als Eingabe gegeben, und wir können diese Luftindizes nur Zehe ignorieren , nur um zu sehen, wo sich diese Zahlen befinden. Angesichts dieser Matrix als Eingabe mit diesem Array von drei Arrays, wir wollen, dass unsere Funktion diese Matrix ausgibt. Wie Sie sehen können, ist alles nur um 90 Grad im Uhrzeigersinn gedreht. Der eine wird nach rechts bewegt, drei geht runter, die Neun geht nach links und die Sieben geht hoch und alles andere bewegt sich mit den vier. Entschuldigung, die beiden bewegt sich nach rechts und unten die sechs Züge nach unten und links und weiter und weiter. Im Wesentlichen müssen wir diese Matrix um 90 Grad im Uhrzeigersinn drehen. Gehen Sie weiter und probieren Sie den Salat auf eigene Faust. Es macht ziemlich Spaß, und es ist nicht furchtbar schwierig, aber komm zurück, wenn du bereit bist. Wenn Sie das Problem ausprobiert haben, lassen Sie uns fortfahren und beginnen, es zu lösen. Das Problem besagt also, dass die ursprüngliche Matrix unverändert bleiben sollte. Und was das bedeutet, ist, dass wir eine neue Matrix erstellen wollen, um zurückzukehren. Wir wollen nicht nur Dinge im Original bewegen, aber wir wollen ein neues machen. Also lasst uns das schaffen. Also fangen wir einfach mit einem Array an und wie füllen wir diese Matrix aus? Nun, fangen wir vorerst mit einer quadratischen Matrix an. Also lassen Sie uns diese drei mal drei untersuchen, die wir bereits haben. Also, wenn wir eine drei durch drei ist Eingabe. Wir wissen, dass unsere Ergebnisse auch drei mal drei sein werden. Wenn wir vier mal vier haben. Sind Ausgänge werden ein vier mal vier sein. Also wird die Zahl einer Erhöhung hier und unsere neue Matrix die gleiche sein wie die Nummer einer Erhöhung in der alten Matrix. Und wir können herausfinden, dass mit der length Eigenschaft dieses äußere Array eine Länge von drei hat, weil es drei Elemente darin hat. So können wir das verwenden, um nur die gleiche Anzahl von Zeilen für diese neue Matrix zu erstellen. Und das ist unsere neue Matrix wird die richtige Nummer eines Rennens haben. Und stellen wir sicher, dass wir das richtig machen, während wir weitermachen, und wir werden ein Beispiel geben. Geh und stehle das. Ok, da. Also haben wir eine Reihe von drei Rennen wie beabsichtigt. Wir wissen jetzt auch am Ende, dass wir das zurückgeben müssen, damit wir einfach diese Aussage schreiben können. Und jetzt, Was machen wir jetzt in der Mitte? Wir müssen nur die Matrix mit den richtigen Zahlen füllen, und wir werden das tun, indem wir die Matrix durchschleifen. Also schleifen wir uns hier durch und wir werden tatsächlich in jede innere Eile schleifen müssen . Also im Moment schleifen wir uns durch dieses äußere Array und die aktuelle Rolle, in der diese sein wird ? Und dann werden die Schleifen zu diesem weitergehen. Und in diesem müssen wir auch jedes von ihnen durchschauen, um zu diesen Zahlen individuell zu gelangen. Hier verwenden wir matte Nullpunktlänge. Eigentlich kann dies einfach in Mathe geändert werden, dass Link. Das ist das gleiche, denn im Moment konzentrieren wir uns nur auf quadratische Matrizen, und die Anzahl der Elemente hier wird die gleiche wie die Gesamtzahl einer Erhöhung sein. Das wird also für uns gut funktionieren. Und jetzt, für den harten Teil, müssen wir tatsächlich herausfinden, wie man diese Gegenstände an den richtigen Ort bringt. 11. Drehung einer Square: Willkommen zurück. Lassen Sie uns weiter an diesem Problem arbeiten. Bisher haben wir das Fundament gelegt, und jetzt brauchen wir nur einen Algorithmus, um diese Teile tatsächlich an die richtige Stelle zu bringen. Und lassen Sie uns weiter gehen und daran arbeiten und Beispiele finden. Für ein Beispiel, fangen wir mit einer einfachen zwei mal zwei Matrix an, also werde ich einfach voran und auch eine verwenden . Dies braucht eine andere Klammer und 34 und dies muss in 31 vier zu drehen, und das ist eine 90-Grad-Drehung. Lassen Sie uns also voran gehen und die tatsächlichen Positionsänderungen abbilden, die passieren. Und was meinst du damit? Ist das so, dass man hier an Position 00 ist Es ist in der Zeile bei Index Null in dieser Zeile. Es ist bei Spalte Null, also können wir sagen, 00 bewegt sich zu immer noch in Rose Null. Das bleibt also gleich, und es ist bekannt Spalte eins. Also, das wird zu 01 gehen und machen wir das auch für die anderen drei. Also bekommen wir einen Gegenstand bei 01 Züge zu 11 und wir bekommen einen Gegenstand bei 10 Umzug dorthin, wo ist durch? Bewegen Sie 200 und wir bekommen 11 auf 10 und das sieht richtig aus. Also von hier aus können wir tatsächlich voran gehen und einen Algorithmus erstellen. Wenn wir das für drei mal drei oder vier mal vier oder eine quadratische Matrix tun, werden wir die gleichen Ergebnisse erhalten. Und diese Ergebnisse werden von einer einfachen mathematischen Regel regiert werden, die dies sein wird. Verzeihen Sie mir für die Art von Leben und nur um sicherzustellen, dass wir das richtig machen, werde ich das lange machen. Also 741 852 963 Das ist genau das, was wir wollen. Und zeigen wir Ihnen, wie das tatsächlich funktioniert. Lass uns ein paar Nummern einstecken. Wenn wir also 00 hier auf die rechte Seite stecken, erhalten wir neue Matrix, also ist Jay positioniert. Null. Also, das sind Tage. Fügen Sie Null hinzu. Also, das ist richtig. Der allererste Punkt wird Null sein, und der zweite Punkt wird matt Punktlänge sein. Die Länge dieser Matrix ist also, äh, Länge zwei. Es gibt drei Elemente, aber seine Länge zu so zwei minus eins ist eins minus I, was Null ist, da wir bei 00 beginnen Also 00 eingesteckt hier führt 20 Komma eins auf der linken Seite. Also haben wir tatsächlich 00 und 201 Wir haben den Artikel von 00 auf 01 verschoben Wir können dies für den Rest von ihnen tun . Wir können hier 11 einstecken, und was wir bekommen, ist eins in der linken Position und Matt in der Länge bis minus eins minus eins . Wir bekommen hier Null, also sind wir 11 in 210 geworden. Gehen Sie voran und stecken Sie diese beiden an. Oder versuchen Sie, was auch immer Sie wollen. Es wird jedes Mal funktionieren, wenn wir dieses Problem für quadratische Matrizen gelöst haben und in der nächsten Lektion weitergehen und versuchen, dies auf alle Maitresse anzuwenden. Leichtigkeit. Siehst du da. 12. Die Matrix: Zwei Matrix:: Willkommen zurück in der letzten Lektion. Wir haben dieses Problem in der Tat beendet. Aber ich will euch einen kleinen Bonus geben. Das erste Bonusproblem wird also richtig sein. Eine Funktion, die alle Rotator Matrix 180 Grad. Und der nächste wird Recht haben. Eine, die es um 270 Grad dreht. Du könntest das auch als negativ 90 vorstellen. Das haben wir schon. Ich habe es einfach zusammengebrochen. Teoh, mach Platz für die anderen. Dies ist genau die gleiche Funktion, die wir zuvor hatten, und nichts ist anders. Ich kollabiere es nur. Und dies sind erwartete Ergebnisse für diese Matrix. So gedreht 90. Wir wollen diese 1 80 Willst du diese 2 70? Wir wollen das hier. Alles, was wir tun müssen, ist, diese zwei Funktionen zu schreiben. Es gibt ein paar verschiedene Möglichkeiten, sie zu tun. Gehen Sie weiter und versuchen Sie es, wenn Sie möchten. Wenn du weitermachen willst und einfach nur das Video anschauen willst, kannst du das auch tun. Da dies nur ein Bonus ist, lasse ich es gleiten. Also, hier ist, wie ich dieses Problem lösen werde. Und das ist ein erledigter. Und das ist auch getan und stellt sicher, dass diese Line-up während 14 bis 4321 2413 Und wir sind gut. Glaubst du, das ist Betrug? Das tue ich auch . Aber der Punkt ist, es spielt wirklich keine Rolle. Diese Funktionen funktionieren, und sie funktionieren perfekt. Und es gibt tatsächlich Gründe, warum Sie diese gegenüber einer anderen großen Funktion wie dieser bevorzugen würden. Ihre wertvollste Ressource als Entwickler ist Ihre eigene Zeit. Es ist nicht die Zeit, die der Computer benötigt, um Ihren Code auszuführen. Diese Ergebnisse sind extrem schnell. Ich war gelaufen und bevor ich denken kann, dass die Ergebnisse da sind, und das wird für fast jede Funktion passieren, die Sie in Ihrer gesamten Karriere schreiben. Computer fliegen schnell Menschen sind langsam, so dass Sie Ihre Zeit damit verbringen möchten, so wenig Code wie möglich zu schreiben. Wir haben eine Funktion geschrieben, die perfekt funktioniert, und wir wissen, dass sie funktioniert. Wir haben es ein bisschen getestet. Warum nicht wiederverwenden? Wenn wir können, verwenden wir es einfach wieder. Wir nennen es zweimal, und es dreht unsere Funktion um 1 80 Grad. Wir nennen es noch einmal, und es wird es 270 Grad tun, anstatt den gleichen im Wesentlichen den gleichen Code mit ein paar Unterschieden wieder zu schreiben und potenziell Fehler einzuführen. Wenn wir versuchen, das zu tun, können wir die eine Funktion verwenden, die wir kennen, funktioniert und eine Menge Zeit sparen, dies auf einfache Weise statt auf die harte Weise zu tun, die zeitliche Komplexität dieser Funktionen wird die gleiche wie das Original sein. Erinnerst du dich an diese Waas für Zeit? Oh, von n und dieser hier wird es sein, wir machen es nur zweimal. Also zwei Mal rein und wir fallen konstant, also wird es drin sein. immer, dieser hier wäre dreimal drin, was sich wieder in Oh verwandeln wird, dann wird der Raum das Gleiche sein. Also war die Platzkomplexität für dieses hier vorbei, denn wo eine völlig neue Matrix mit den gleichen Elementen hier erstellt wird, wird es auch wieder von in sein. Wir wurden mit zwei multipliziert. Da die Funktion zweimal aufgerufen wird, haben wir zwei davon und Speicher auf einmal, und die Raumkomplexität wird auch für diesen etwas Gleiches sein. Das war's. Ich hoffe, das hat Spaß gemacht. Und ich werde Sie im nächsten Video sehen, wo wir tatsächlich lernen, wie man eine Matrix an Ort und Stelle dreht . Und was das bedeutet, ist, dass wir keine Erhöhung oder zusätzliche Datenstrukturen in unserer Funktion erstellen können. Es ist ein viel schwierigeres Problem, und wir müssen alles neu schreiben, also sehe ich dich dort. 13. An Ort ze Matrix – Strategie: Willkommen zum nächsten Problem. Matrix an Ort und Stelle drehen. Es ist genau das gleiche, was das letzte Problem ist. Außer in diesem Fall wissen wir, dass wir immer eine quadratische Matrix bekommen, was bedeutet, eine drei mal 3555 10 mal 10 was auch immer. Und unser Ziel ist es, es um 90 Grad im Uhrzeigersinn zu drehen. Aber dieses Mal müssen wir es an Ort und Stelle tun. Und der Schlüssel dazu, was an Ort und Stelle bedeutet, ist, dass Sie keine zusätzlichen Matrizen oder eine Erhöhung in Ihrer Funktion oder einer anderen Datenstruktur erstellen können. Wirklich. Alles, was Sie speichern können, sind Variablen. Gehen Sie weiter und versuchen Sie es selbst, wenn Sie möchten. Ich werde Sie warnen. Das hier ist sehr schwierig. Und selbst wenn Sie herausgefunden haben, wie es geht, ist der Code sehr schwierig zu schreiben. Also werde ich das in zwei Problemen lösen. Zuerst werden wir die Strategie besprechen, die wir einsetzen werden, und dann zeigen wir Ihnen einen Code. Also habe ich hier ein kleines Skizzenblock. Hoppla. Und nehmen wir diese Matrix als Eingabe und diskutieren einfach die Strategie, die wir verwenden werden. Also hier haben wir eine Fünf-mal Fünf-Matrix und wir werden das nur als Beispiel verwenden. Jetzt werde ich voran gehen und im Wesentlichen den Umfang der Matrix herausnehmen. Also werden wir so tun, als gäbe es das Innere nicht einmal. Alles, was uns wichtig ist, ist Thea äußere Reihen und Spalten. Und was wir dio-wollen ist das. Wir wollen die obere linke Handnummer nehmen und sie hier rüber bewegen. Also wollen wir das hier rausbringen. Aber bevor wir das tun, müssen wir herausfinden, was mit dieser Nummer zu tun ist. Wir können es nicht einfach außer Kraft setzen, weil diese Zahl hier runterziehen muss und diese hier rüber gehen muss . Und schließlich muss dieser hier rüber gehen, um unseren kleinen Kreis zu vervollständigen. wir das getan haben, zog Fives hierher , 20 Fünf hier und 20 hier oben. Wir haben eine volle 90-Grad-Drehung der Ecken gemacht, so dass diese Ecken vollständig gedreht wurden. Was wir jetzt tun wollen, ist weiterzumachen. Also fangen Sie hier an und wir müssen diesen Kerl hierher bringen, und die 10 werden an den Punkt 24 ziehen . 24 wird zu 16 gehen und die 16 wird ersetzen, wo die beiden ursprünglich verlassen. Also, jetzt haben wir voran, und wir haben 2/5 dieses gesamten äußeren Umfangs gedreht, und wir brauchen tatsächlich die Hälfte davon. Tut mir leid, denn es ist uns nur wichtig, wenn er das viermal machen muss. Also, wenn Sie es für die Ecken tun und dann diesen Artikel in diesem Artikel und dann die vier hier drüben , haben wir bereits die fünf getan, die bereits betreut wurde. Also brauchten wir das nur vier Mal. Das müssen wir codieren, sobald wir das replizieren können und ich werde die Pfeile nicht nochmal zeichnen , weil das das nur unnötig verwirrend macht. Aber wenn wir erst einmal gedacht haben, können wir dann zur nächsten Reihe weitergehen. Wir sind nicht die nächste Reihe. Entschuldigung. Nächster Umkreis. Also werde ich das hier rausholen, und ich werde versuchen, es etwas tiefer zu bewegen und zurück zum Bleistift zu wechseln. Wenn wir also mit dem äußeren Umfang fertig sind, was bedeutet, dass er vollständig gedreht ist, können wir zum nächsten inneren Umfang übergehen, und wir wollen genau dasselbe tun. Bewegen Sie den Kerl hier. Bewegen Sie den Kerl hier und weiter und weiter. Und sobald wir das geschafft haben, können wir zum nächsten übergehen. In diesem Fall, da wir nur eine 555 hatten, wird der allerletzte Umfang die Nummer 13 für sich selbst sein. Und wir können das lassen, wie es ist, so brauchen wir das wirklich nur zweimal zu tun. In diesem Fall, wenn es sieben mal sieben ist, müssen es noch einmal tun, wenn es eine neun von neun und dann ein anderes Mal. Aber das ist die Strategie, die wir programmieren müssen. Probieren Sie es auf eigene Faust aus. Und in der nächsten Lektion zeigen wir Ihnen die Lösung und zeigen, wie sie funktioniert. 14. An Ort ze Matrix – Lösung: Willkommen zurück, um Matrix an Ort und Stelle zu drehen. Anstatt dieses Problem zu lösen. Leben, wie wir es für die letzten einige Probleme getan haben, dachte ich, es wäre besser, nur die Lösung zu zeigen und darüber zu sprechen. Dieses Problem ist vielleicht das technisch herausforderndste Problem in diesem ganzen Kurs. Anstatt über meinen Mantel, meinen Code zu fummeln, während ich versuche, es dir zu erklären, dachte ich, es wäre einfacher, es einfach auszuschreiben und ihn danach zu erklären, nur um sicherzustellen , dass es funktioniert. Lasst uns weitermachen und es laufen lassen. Also für diese Matrix hier erwarten wir dies als Ausgabe. Und wenn ich noch einmal gelaufen wäre, bekommen wir genau das Gleiche und es ist genau das, was wir erwarten, das ist gut. Lassen Sie uns voran gehen und zeigen Sie Ihnen den Code und sprechen darüber, was jede Zeile tut. Also liegend 21 Das ist variabel. Gesamtschichten wird eine Zahl enthalten, die uns sagt, wie viele Schichten wir durchgehen müssen . Und was ich mit einer Schicht meine, ist jeder von diesen. Das hier ist also dieser Umfang eine Schicht, die wir durchziehen wollen. Wir wollen jedes Element in diesem Umfang drehen und dann zur nächsten Ebene gehen, die dieser innere Kreis hier sein wird. Wenn wir also eine Matrix haben, die fünf mal fünf ist. Wir müssen nur zwei Schichten durchlaufen. Und diese Formel hier wird uns sagen, dass innere for-Schleife, wir gehen von Null auf die Anzahl der Schichten, wie wir gerade erwähnt. Und das ergibt Sinn. Und diese Linie hier bestimmt die Stoppbedingung für unsere innere for-Schleife. Und die Art und Weise, die funktioniert, ist, dass wir bei Schicht plus eins beginnen werden. Also, was das bedeutet, ist, dass wir anfangen. Also, wenn wir mit dieser Matrix-Schichten beginnen im Wesentlichen wird anfänglich gleich Null. Wir sagen also, wir wollen bei Index eins beginnen, was am 02 genau hier bedeutet, dass die Stoppbedingung, die matte Punktlänge minus Schicht sein wird, bedeutet, dass wir bei fünf minus Null anhalten wollen. Also wollen wir hier anhalten. Also, als wir diese Übung durchgingen, begannen wir bei 01 und wir landeten Oh, denn unsere Schleife beginnt stattdessen bei 02 und endet bei 05, was genau das gleiche funktioniert. Also bewegten wir die beiden auf die Zehner, legen Sie, dass 10 zu 24 24 24 16 und 16 zu 2, und dann bewegen wir uns auf die drei und gedreht und dann die vierte und dann letzte von allen wir die Ecken. Dieser Code hier drin macht das ganze schwere Heben. Wenn wir also die beiden auf die 10 verschieben, müssen wir die 10 in einer Variablen speichern , bevor wir sie durch zwei ersetzen können. Wenn wir es einfach außer Kraft setzen, verlieren wir 10. Also müssen wir dies speichern und dann seinen Wert aktualisieren. Wir müssen dann die 24 hier speichern, und wir müssen sie durch die 10 ersetzen. Also werden wir eigentlich zwei verschiedene Variablen brauchen. Tempel Eins und Versuch, Temp eins wird die 10 zunächst speichern und Temperament 24 wird ihre Verwendung drehen, also werden die 10 hier bewegen, und wir werden das in eine Variable klopfen. Dann wird 24 zu 16 bewegen, die wir in einer Variablen speichern werden und dann 16 wird dorthin bewegen, wo es glücklich ist. Sie müssen wahrscheinlich eine Matrixrotation von Hand durchlaufen, um zu beobachten, wie das funktioniert. Behalten Sie jede der Variablen im Auge und behalten Sie den Überblick, was buchstäblich passiert. Versuchen Sie, eine Matrix auf einem Stück Papier zu zeichnen und gehen Sie durch diesen Code. Sobald jeder von ihnen ausgetauscht und die gesamte Ebene gedreht wird, wird diese innere Schleife beendet sein, und diese äußere Schleife wird inkrementieren. Also gehen wir zu dieser Ebene, und wir werden genau das gleiche tun. Also wird unsere Schleife bei der Acht beginnen und an der Neun enden, die das A drehen wird um es zu bewegen, um die 14 bewegen, die 14 aufwärts und weiter und weiter, und dann wird es die Ecken danach machen. Dann wird es die Neun auf die 19 bewegen und am Ende weiter und weiter. Wir haben gerade die gleiche genaue Matrix zurückgegeben, die wir erhalten haben. Unabhängig von der zeitlichen und räumlichen Komplexität, wir verarbeiten jedes Element nur, wenn wir eine Ebene drehen, und dann gehen wir auf die nächste Ebene, die Zeitkomplexität wird aus dem Raum. Komplexität. Nun, wir erstellen hier nirgends eine einzige Datenstruktur. Alles, was wir tun, ist die Verwendung von Variablen. Es spielt keine Rolle, wie groß die Matrix ist. Wir verwenden die gleiche Anzahl von Variablen, also wird das zu O von eins gehen. Das hier ist rau. Wenn Sie in einem Interview gefragt werden, werden Sie höchstwahrscheinlich aufgefordert, einfach die allgemeine Strategie zu geben, die Sie verwenden würden, und vielleicht ein wenig über die Effizienz zu sprechen . Es richtig zu machen, könnte eine gute Programmierer Stunden dauern, was viel zu lang für ein Interview wäre. Dieses Problem ist großartig, wenn wir darüber nachdenken, wie Daten räumlich transformiert werden können. Die Fähigkeit, die Lösung zu verstehen, zeigt mächtige Argumentationsfähigkeiten und ausgezeichnete räumliche Argumentation als auch. Wenn dies zu komplex ist, versuchen Sie, ein anderes Mal darauf zurückzukommen. Versuchen Sie, durch die Funktion zu gehen, indem Sie eine einfache Matrix verwenden, wie eine zwei mal zwei oder drei drei. Behalten Sie den Überblick über jede der Variablen und was mit der Matrix passiert. Gehen Sie voran und versuchen Sie es selbst für jede quadratische Matrix, die Sie mögen. Wir sehen uns im nächsten Video