Heim > Artikel > Web-Frontend > #aysofCode September: Meine Reise zur DSA-Meisterschaft
September ini, saya memulakan cabaran 30 Hari Kod yang dikenakan sendiri, komitmen untuk menyelesaikan sekurang-kurangnya dua masalah Struktur Data dan Algoritma (DSA) setiap hari. Matlamat saya adalah untuk mendorong diri saya keluar dari zon selesa saya, membina konsistensi dan meningkatkan kemahiran menyelesaikan masalah dan logik pengaturcaraan saya.
Saya bukan hanya berpegang pada satu platform — saya menyelesaikan cabaran 30 Hari Kod HackerRank, rancangan JavaScript 30 Hari LeetCode, dan juga menangani lagu Top Interview 150 LeetCode, koleksi 150 masalah temu duga biasa untuk sesiapa yang bersedia untuk temu bual pengekodan. Selain itu, saya mengambil beberapa pelajaran tentang Structy untuk mengukuhkan lagi pemahaman saya tentang konsep DSA.
Saya menyelesaikan kebanyakan masalah menggunakan JavaScript (kecuali untuk beberapa masalah HackerRank yang mana JavaScript tidak disokong, jadi saya menggunakan Python sebaliknya). Untuk membantu memastikan diri saya bertanggungjawab, serta berkongsi kemajuan saya, saya menyiarkan cabaran yang saya selesaikan setiap hari di Twitter. Anda boleh menemuinya dalam jejak petikan ini:
Setiap hari mendedahkan saya kepada pelbagai jenis struktur data dan algoritma. Saya belajar mengendalikan
Sesetengah masalah melibatkan struktur yang lebih kompleks seperti senarai terpaut dan pepohon binari, manakala yang lain melemparkan tatasusunan matriks / n-D ke dalam campuran, membenarkan saya berurusan dalam ruang berbilang dimensi.
Kepelbagaian masalah membuatkan saya sentiasa bersemangat. Masalah pada runut JavaScript 30 Hari LeetCode memperkenalkan saya kepada asas seperti
Runut Temuduga Teratas 150 LeetCode telah mengambil langkah lebih jauh, melemparkan saya antara masalah dengan pelbagai kesukaran dan pendekatan. Menyelesaikan sekurang-kurangnya satu daripada ini setiap hari adalah tidak ternilai. Masalah ini juga mencabar saya untuk berfikir lebih kerap tentang pengoptimuman dan cara pendekatan berbeza boleh menjejaskan masa jalan dan kecekapan memori secara drastik.
Saya juga mengambil pelajaran Structy di samping cabaran ini untuk mengukuhkan pemahaman saya tentang konsep utama. Saya mempelajari cara yang lebih cekap untuk mengendalikan beberapa struktur data, seperti bahagian pada senarai terpaut dan pepohon binari. Saya amat menghargai pendekatan dinamik platform untuk mengajar dan memecahkan masalah dengan cara yang menjadikannya mudah dihadam. Ia merupakan platform yang hebat untuk mempelajari DSA pada tahap yang sangat asas dan kemudian menterjemah pemahaman ini kepada masalah pengekodan lain yang saya hadapi.
Seiring berjalannya waktu, saya menemui pelbagai jenis pendekatan penyelesaian, teknik penyelesaian masalah seperti
Saya mendapati pendekatan dua mata adalah cara yang mudah dan berkesan untuk menyelesaikan masalah yang melibatkan jujukan (terutamanya tatasusunan dan rentetan), dengan mengurangkan ruang carian untuk penyelesaian yang lebih cekap. Saya juga menggunakan algoritma tamak di mana saya perlu membuat pilihan optimum setempat pada setiap langkah.
Teknik tetingkap gelongsor adalah satu lagi pembuka mata— pada mulanya mencabar, tetapi berharga untuk masalah yang melibatkan sub-baris atau subrentetan; masalah yang memerlukan menjejaki julat elemen yang bergerak dalam urutan. Peta cincang dan jadual cincang bagus untuk pasangan nilai kunci dalam masalah yang melibatkan carian kerap.
Salah satu teknik paling kompleks yang saya gunakan ialah pengaturcaraan dinamik. Pada awalnya, saya mendapati DP agak menakutkan kerana kesukaran untuk mengenali submasalah yang bertindih, tetapi dengan penghafalan pendedahan berulang menjadi kawan baik saya dalam mengoptimumkan panggilan rekursif.
Selain masalah teras DSA, saya juga mendapat peluang untuk mencuba konsep JavaScript yang lebih maju. Saya menulis fungsi pembungkus, mempelajari cara mengawal aliran kod saya dan melanjutkan fungsi untuk keperluan tertentu. Saya juga belajar untuk menetapkan pemasa pada fungsi yang membolehkan saya mengendalikan operasi sensitif masa atau mengehadkan kekerapan fungsi tertentu boleh dilaksanakan.
Menggunakan prototaip menunjukkan kepada saya bahawa jenis data boleh dimanipulasi melebihi keupayaan terbinanya dengan mencipta kaedah tersuai. Ini membolehkan saya memanjangkan fungsi terbina jenis data seperti objek dan tatasusunan dengan cara baharu. Saya mula menghargai kepentingan menulis kod modular yang bersih.<script> // Detect dark theme var iframe = document.getElementById('tweet-1840720685099864068-290'); if (document.body.className.includes('dark-theme')) { iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1840720685099864068&theme=dark" } </script>
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.
Eine weitere Sache, der ich während dieser Reise immer 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.
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 geschärft habe, werden sich zweifellos auf meine Karriere als Softwareentwickler auswirken.
Ich bin stolz auf mich, dass ich mir Mühe gegeben habe, und dankbar für meine Freunde, die mich während der gesamten Herausforderung angefeuert und ihre Unterstützung und Weisheit angeboten haben.
Das obige ist der detaillierte Inhalt von#aysofCode September: Meine Reise zur DSA-Meisterschaft. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!