Datentypen, einfach bis fortgeschritten

Jeden Tag habe ich verschiedene Arten von Datenstrukturen und Algorithmen kennengelernt. Ich habe gelernt, mit

umzugehen

Einige Probleme betrafen komplexere Strukturen wie verknüpfte Listen und Binärbäume, während bei anderen Matrizen/n-D-Arrays hinzukamen, sodass ich mich mit mehrdimensionalen Räumen befassen konnte.

Die Vielfalt der Probleme hielt mich auf Trab. Die Probleme im 30-Tage-JavaScript-Track von LeetCode führten mich in Grundlagen wie

ein

LeetCodes Track „Top Interview 150“ ging noch einen Schritt weiter und warf mich zwischen Problemen unterschiedlicher Schwierigkeit und Herangehensweise hin und her. Es war von unschätzbarem Wert, jeden Tag mindestens eine davon zu lösen. Diese Probleme forderten mich auch heraus, häufiger über Optimierung nachzudenken und darüber, wie sich unterschiedliche Ansätze drastisch auf die Laufzeit und Speichereffizienz auswirken könnten.

Neben diesen Herausforderungen habe ich auch Structy-Unterricht genommen, um mein Verständnis der Schlüsselkonzepte zu festigen. Ich habe effizientere Methoden zum Umgang mit einigen Datenstrukturen kennengelernt, beispielsweise die Abschnitte zu verknüpften Listen und Binärbäumen. Besonders geschätzt habe ich den dynamischen Ansatz der Plattform, Probleme so zu vermitteln und aufzuschlüsseln, dass sie leicht verdaulich sind. Es ist eine großartige Plattform, um DSA auf einem sehr grundlegenden Niveau zu erlernen und dieses Verständnis dann auf andere Codierungsprobleme zu übertragen, mit denen ich konfrontiert bin.

Ansätze und Techniken

Im Laufe der Tage stieß ich auf viele Arten von Lösungsansätzen, Problemlösungstechniken wie

Ich fand den Zwei-Zeiger-Ansatz eine einfache und dennoch leistungsstarke Möglichkeit, Probleme mit Sequenzen (hauptsächlich Arrays und Strings) zu lösen, indem der Suchraum für effizientere Lösungen reduziert wird. Ich habe auch Greedy-Algorithmen verwendet, bei denen ich bei jedem Schritt lokal optimale Entscheidungen treffen musste.

Schiebefenstertechniken waren ein weiterer Augenöffner – anfangs eine Herausforderung, aber wertvoll für Probleme mit Subarrays oder Teilstrings; Probleme, die es erforderten, den Überblick über einen sich bewegenden Bereich von Elementen innerhalb einer Sequenz zu behalten. Hashmaps und Hashtabellen eignen sich hervorragend für Schlüssel-Wert-Paare bei Problemen mit häufigen Suchvorgängen.

Eine der komplexesten Techniken, mit denen ich gearbeitet habe, war die dynamische Programmierung. Anfangs empfand ich DP aufgrund der Schwierigkeit, überlappende Teilprobleme zu erkennen, ziemlich einschüchternd, aber mit der wiederholten Auseinandersetzung wurde das Auswendiglernen zu meinem besten Freund bei der Optimierung rekursiver Aufrufe.

Funktionsmanipulation (feat. Wrappers & Prototypes)

Zusätzlich zu den DSA-Kernproblemen hatte ich auch die Möglichkeit, fortgeschrittenere JavaScript-Konzepte auszuprobieren. Ich habe Wrapper-Funktionen geschrieben und gelernt, wie ich den Fluss meines Codes steuern und die Funktionalität für bestimmte Anforderungen erweitern kann. Ich habe sogar gelernt, Timer für Funktionen festzulegen, wodurch ich zeitkritische Vorgänge bewältigen oder die Ausführungshäufigkeit bestimmter Funktionen begrenzen kann.

Die Arbeit mit Prototypen hat mir gezeigt, dass Datentypen durch die Erstellung benutzerdefinierter Methoden über ihre integrierten Fähigkeiten hinaus manipuliert werden können. Dadurch konnte ich die integrierte Funktionalität von Datentypen wie Objekten und Arrays auf neue Weise erweitern. Ich habe erkannt, wie wichtig es ist, sauberen, modularen Code zu schreiben.

Ich habe auch Memoisierung gelernt, eine Technik, bei der man eine Funktion so ändert, dass sie zuvor aufgerufene Argumente mit ihren Ergebnissen speichert! Hierbei handelt es sich um eine Art Caching, die zur Verbesserung der Leistung bei Problemen beiträgt, bei denen mehrere Aufrufe derselben Funktion erfolgen. Ich habe hier über meine Memoize-Lösung geschrieben, die 99 % (Speicher) übertrifft: Memoize Intutitive Solution übertrifft 99 % Speicher.

Testen und Optimieren

Eine weitere Sache, der ich während dieser Reise mehr Aufmerksamkeit schenkte, war die Optimierung meines Codes. Nach einer gründlichen Einführung in die Big-O-Notation auf Structy verstand ich die Bedeutung der zeitlichen und räumlichen Komplexität und lernte die optimale Technik für die häufigsten Probleme. Gegen Ende des HackerRank-Challenge-Tracks habe ich auch gelernt, Code mithilfe von Klassen zu testen und Generika zu schreiben.

Wegbringen

Als ich die 30-Tage-Code-Herausforderung abgeschlossen hatte, verspürte ich ein tiefes Wachstumsgefühl. Es verbesserte meine Fähigkeit, ein breites Spektrum an Problemen zu bewältigen, und vertiefte mein Verständnis von JavaScript und DSA. Diese einmonatige Reise war mehr als nur das Lösen von Problemen, sie war für mich eine Erinnerung daran, dass ich mich wirklich anstrengen konnte. Als ich die Vorteile von Beständigkeit und Disziplin erkannte, wurde mir die Einstellung vermittelt, jede Herausforderung mit Selbstvertrauen und einem starken Werkzeugkasten an Techniken anzugehen.

Diese Erfahrung markiert einen bedeutenden Meilenstein auf meiner Programmierreise. Die Fähigkeiten, die ich in diesen 30 Tagen verfeinert habe, werden sich zweifellos auf meine Karriere als Software-Ingenieur auswirken.

Ich bin stolz auf mich, dass ich mir die Mühe gemacht habe, und dankbar für meine Freunde, die mich während der gesamten Herausforderung angefeuert und mir ihre Unterstützung und Weisheit angeboten haben.

\\\"#aysofCode

","image":"http://www.luping.net/uploads/20241006/172818757367020cb51a890.jpg","datePublished":"2024-11-07T22:11:52+08:00","dateModified":"2024-11-07T22:11:52+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > #aysofCode September: Meine Reise zur DSA-Meisterschaft

#aysofCode September: Meine Reise zur DSA-Meisterschaft

Veröffentlicht am 07.11.2024
Durchsuche:553

Diesen September habe ich mich einer selbst auferlegten 30 Days of Code-Herausforderung gestellt, bei der ich mich verpflichtet habe, jeden Tag mindestens zwei Probleme mit Datenstrukturen und -algorithmen (DSA) zu lösen. Mein Ziel war es, aus meiner Komfortzone herauszukommen, Konsistenz aufzubauen und meine Fähigkeiten zur Problemlösung und Programmierlogik zu verbessern.

Ich habe mich nicht nur auf eine Plattform beschränkt – ich habe die 30-Tage-Code-Challenge von HackerRank und den 30-Tage-JavaScript-Plan von LeetCode abgeschlossen und mich auch mit LeetCodes Top Interview 150 Track befasst, einer Sammlung von 150 typischen Interviewproblemen für jeden, der sich auf ein Interview vorbereitet Coding-Interview. Zusätzlich habe ich ein paar Lektionen zu Structy genommen, um mein Verständnis der DSA-Konzepte weiter zu stärken.

Ich habe die meisten Probleme mit JavaScript gelöst (mit Ausnahme einiger HackerRank-Probleme, bei denen JavaScript nicht unterstützt wurde, also habe ich stattdessen Python verwendet). Um mich selbst zur Rechenschaft zu ziehen und meine Fortschritte zu teilen, habe ich die Herausforderungen, die ich jeden Tag gelöst habe, auf Twitter gepostet. Sie finden sie in diesem Zitatpfad:

Datentypen, einfach bis fortgeschritten

Jeden Tag habe ich verschiedene Arten von Datenstrukturen und Algorithmen kennengelernt. Ich habe gelernt, mit

umzugehen
  • Arrays
  • Zeichenfolgen
  • Objekte
  • Karten
  • sätze
  • Zahlen
  • boolesche Werte und mehr.

Einige Probleme betrafen komplexere Strukturen wie verknüpfte Listen und Binärbäume, während bei anderen Matrizen/n-D-Arrays hinzukamen, sodass ich mich mit mehrdimensionalen Räumen befassen konnte.

Die Vielfalt der Probleme hielt mich auf Trab. Die Probleme im 30-Tage-JavaScript-Track von LeetCode führten mich in Grundlagen wie

ein
  • Array-Transformationen
  • Funktionstransformationen
  • Abschlüsse
  • Klassen
  • JSONs
  • Versprechen & Zeit.

LeetCodes Track „Top Interview 150“ ging noch einen Schritt weiter und warf mich zwischen Problemen unterschiedlicher Schwierigkeit und Herangehensweise hin und her. Es war von unschätzbarem Wert, jeden Tag mindestens eine davon zu lösen. Diese Probleme forderten mich auch heraus, häufiger über Optimierung nachzudenken und darüber, wie sich unterschiedliche Ansätze drastisch auf die Laufzeit und Speichereffizienz auswirken könnten.

Neben diesen Herausforderungen habe ich auch Structy-Unterricht genommen, um mein Verständnis der Schlüsselkonzepte zu festigen. Ich habe effizientere Methoden zum Umgang mit einigen Datenstrukturen kennengelernt, beispielsweise die Abschnitte zu verknüpften Listen und Binärbäumen. Besonders geschätzt habe ich den dynamischen Ansatz der Plattform, Probleme so zu vermitteln und aufzuschlüsseln, dass sie leicht verdaulich sind. Es ist eine großartige Plattform, um DSA auf einem sehr grundlegenden Niveau zu erlernen und dieses Verständnis dann auf andere Codierungsprobleme zu übertragen, mit denen ich konfrontiert bin.

Ansätze und Techniken

Im Laufe der Tage stieß ich auf viele Arten von Lösungsansätzen, Problemlösungstechniken wie

  • Rekursion
  • Zwei-Zeiger
  • Hashmap
  • Hashtabelle
  • gierige Algorithmen
  • binäre Suche
  • Schiebefenster
  • dynamische Programmierung
  • Caching (Auswendiglernen) und mehr.

Ich fand den Zwei-Zeiger-Ansatz eine einfache und dennoch leistungsstarke Möglichkeit, Probleme mit Sequenzen (hauptsächlich Arrays und Strings) zu lösen, indem der Suchraum für effizientere Lösungen reduziert wird. Ich habe auch Greedy-Algorithmen verwendet, bei denen ich bei jedem Schritt lokal optimale Entscheidungen treffen musste.

Schiebefenstertechniken waren ein weiterer Augenöffner – anfangs eine Herausforderung, aber wertvoll für Probleme mit Subarrays oder Teilstrings; Probleme, die es erforderten, den Überblick über einen sich bewegenden Bereich von Elementen innerhalb einer Sequenz zu behalten. Hashmaps und Hashtabellen eignen sich hervorragend für Schlüssel-Wert-Paare bei Problemen mit häufigen Suchvorgängen.

Eine der komplexesten Techniken, mit denen ich gearbeitet habe, war die dynamische Programmierung. Anfangs empfand ich DP aufgrund der Schwierigkeit, überlappende Teilprobleme zu erkennen, ziemlich einschüchternd, aber mit der wiederholten Auseinandersetzung wurde das Auswendiglernen zu meinem besten Freund bei der Optimierung rekursiver Aufrufe.

Funktionsmanipulation (feat. Wrappers & Prototypes)

Zusätzlich zu den DSA-Kernproblemen hatte ich auch die Möglichkeit, fortgeschrittenere JavaScript-Konzepte auszuprobieren. Ich habe Wrapper-Funktionen geschrieben und gelernt, wie ich den Fluss meines Codes steuern und die Funktionalität für bestimmte Anforderungen erweitern kann. Ich habe sogar gelernt, Timer für Funktionen festzulegen, wodurch ich zeitkritische Vorgänge bewältigen oder die Ausführungshäufigkeit bestimmter Funktionen begrenzen kann.

Die Arbeit mit Prototypen hat mir gezeigt, dass Datentypen durch die Erstellung benutzerdefinierter Methoden über ihre integrierten Fähigkeiten hinaus manipuliert werden können. Dadurch konnte ich die integrierte Funktionalität von Datentypen wie Objekten und Arrays auf neue Weise erweitern. Ich habe erkannt, wie wichtig es ist, sauberen, modularen Code zu schreiben.

Ich habe auch Memoisierung gelernt, eine Technik, bei der man eine Funktion so ändert, dass sie zuvor aufgerufene Argumente mit ihren Ergebnissen speichert! Hierbei handelt es sich um eine Art Caching, die zur Verbesserung der Leistung bei Problemen beiträgt, bei denen mehrere Aufrufe derselben Funktion erfolgen. Ich habe hier über meine Memoize-Lösung geschrieben, die 99 % (Speicher) übertrifft: Memoize Intutitive Solution übertrifft 99 % Speicher.

Testen und Optimieren

Eine weitere Sache, der ich während dieser Reise mehr Aufmerksamkeit schenkte, war die Optimierung meines Codes. Nach einer gründlichen Einführung in die Big-O-Notation auf Structy verstand ich die Bedeutung der zeitlichen und räumlichen Komplexität und lernte die optimale Technik für die häufigsten Probleme. Gegen Ende des HackerRank-Challenge-Tracks habe ich auch gelernt, Code mithilfe von Klassen zu testen und Generika zu schreiben.

Wegbringen

Als ich die 30-Tage-Code-Herausforderung abgeschlossen hatte, verspürte ich ein tiefes Wachstumsgefühl. Es verbesserte meine Fähigkeit, ein breites Spektrum an Problemen zu bewältigen, und vertiefte mein Verständnis von JavaScript und DSA. Diese einmonatige Reise war mehr als nur das Lösen von Problemen, sie war für mich eine Erinnerung daran, dass ich mich wirklich anstrengen konnte. Als ich die Vorteile von Beständigkeit und Disziplin erkannte, wurde mir die Einstellung vermittelt, jede Herausforderung mit Selbstvertrauen und einem starken Werkzeugkasten an Techniken anzugehen.

Diese Erfahrung markiert einen bedeutenden Meilenstein auf meiner Programmierreise. Die Fähigkeiten, die ich in diesen 30 Tagen verfeinert habe, werden sich zweifellos auf meine Karriere als Software-Ingenieur auswirken.

Ich bin stolz auf mich, dass ich mir die Mühe gemacht habe, und dankbar für meine Freunde, die mich während der gesamten Herausforderung angefeuert und mir ihre Unterstützung und Weisheit angeboten haben.

#aysofCode September: My journey to DSA Mastery

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/akcumeh/30daysofcode-september-my-journey-to-dsa-mastery-647?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3