#aysofCode 9 月: DSA マスタリーへの私の旅
今年の 9 月、私は自らに課した 30 日間のコード チャレンジに着手しました。これは、毎日少なくとも 2 つのデータ構造とアルゴリズム (DSA) の問題を解決するという取り組みです。私の目標は、自分自身を快適ゾーンから押し出し、一貫性を築き、問題解決スキルとプログラミング ロジックを向上させることでした。
私は 1 つのプラットフォームだけに固執したわけではありません。HackerRank の 30 日間のコード チャレンジ、LeetCode の 30 日間の JavaScript プランを完了し、また、LeetCode の Top Interview 150 トラック (面接の準備をしている人向けの 150 の典型的な面接の問題を集めたもの) にも取り組みました。コーディングインタビュー。さらに、DSA の概念の理解をさらに強化するために、Structy に関するレッスンをいくつか受講しました。
私は JavaScript を使用してほとんどの問題を解決しました (JavaScript がサポートされていなかったため、代わりに Python を使用したいくつかの HackerRank 問題を除いて)。自分自身に責任を持たせるため、また自分の進捗状況を共有するために、毎日解決した課題を Twitter に投稿しました。それらは次の引用履歴で見つけることができます:
データ型、基本から高度まで
私は毎日、さまざまな種類のデータ構造とアルゴリズムに触れました。
- の扱い方を学びました
- 配列
- 文字列
- オブジェクト
- 地図
- セット
- 数字
- ブール値など。
一部の問題には、リンク リストやバイナリ ツリーなどのより複雑な構造が含まれていましたが、他の問題には行列や n 次元配列が混入しており、多次元空間を扱うことができました。
問題の多様性に私は目が離せませんでした。 LeetCode の 30 日間の JavaScript トラックの問題は、
- のような基礎を教えてくれました。
- 配列変換
- 関数変換
- 閉店
- クラス
- JSON
- 約束と時間。
LeetCode の Top Interview 150 トラックはさらに一歩進んで、さまざまな難易度やアプローチの問題の間で私を翻弄しました。毎日これらのうち少なくとも 1 つを解決することは非常に貴重でした。また、これらの問題により、最適化について、また、さまざまなアプローチが実行時間とメモリ効率にどのように大きな影響を与える可能性があるかについて、より頻繁に考えるようになりました。
私はこれらの課題と並行して Structy のレッスンも受講し、主要な概念の理解を強化しました。リンク リストやバイナリ ツリーのセクションなど、一部のデータ構造を処理するより効率的な方法を学びました。私は特に、理解しやすい方法で問題を教え、分解するというプラットフォームのダイナミックなアプローチを高く評価するようになりました。これは、DSA を非常に基本的なレベルで学習し、この理解を私が直面する他のコーディングの問題に応用するのに最適なプラットフォームです。
アプローチとテクニック
日が経つにつれて、私はさまざまな種類の解決策のアプローチ、次のような問題解決手法に出会いました。
- 再帰
- ツーポインタ
- ハッシュマップ
- ハッシュテーブル
- 貪欲なアルゴリズム
- 二分探索
- 引き違い窓
- 動的プログラミング
- キャッシュ (メモ化) など。
2 ポインタ アプローチは、より効率的な解決策を得るために検索スペースを削減することで、シーケンス (主に配列と文字列) に関連する問題を解決するための単純かつ強力な方法であることがわかりました。また、各ステップで局所的に最適な選択を行う必要がある貪欲なアルゴリズムも使用しました。
スライディング ウィンドウ手法もまた目を見張るものでした。最初は難しかったですが、部分配列や部分文字列が関係する問題には価値がありました。シーケンス内の要素の移動範囲を追跡する必要がある問題。ハッシュマップとハッシュテーブルは、頻繁な検索を伴う問題のキーと値のペアに最適です。
私が取り組んだ最も複雑なテクニックの 1 つは動的プログラミングでした。初期の頃、重複する部分問題を認識するのが難しいため、DP は非常に恐ろしいものだと感じましたが、繰り返し使用するうちに、メモ化は再帰呼び出しの最適化において私の親友になりました。
関数操作 (feat. ラッパーとプロトタイプ)
DSA の中核的な問題に加えて、より高度な JavaScript の概念を試す機会も得られました。コードのフローを制御し、特定の要件に合わせて機能を拡張する方法を学びながら、ラッパー関数を作成しました。関数にタイマーを設定する方法も学びました。これにより、時間に敏感な操作を処理したり、特定の関数の実行頻度を制限したりすることができます。
プロトタイプを使って作業すると、カスタム メソッドを作成することで、データ型が組み込みの機能を超えて操作できることがわかりました。これにより、オブジェクトや配列などのデータ型の組み込み機能を新しい方法で拡張できるようになりました。クリーンでモジュール化されたコードを書くことの重要性を理解するようになりました。<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>
我還學習了記憶化,這是一種修改函數以儲存先前呼叫的參數及其結果的技術!這是一種緩存,有助於提高多次調用相同函數的問題的效能。我在這裡寫了關於我的 Memoize 解決方案擊敗 99%(內存)的文章:Memoize 直觀解決方案擊敗 99% 內存。
測試與優化
在這段旅程中我開始更加關注的另一件事是我的程式碼的最佳化。在正確介紹了 Structy 上的大 O 表示法之後,我了解時間和空間複雜性的重要性,並學會了解決最常見問題的最佳技術。在 HackerRank 挑戰賽接近尾聲時,我還學會了使用類別測試程式碼並編寫泛型。
外賣
當我完成 30 天程式設計挑戰時,我感受到了深刻的成長感。它提高了我處理各種問題的能力,加深了我對 JavaScript 和 DSA 的理解。這一個月的旅程不只是解決問題,還提醒自己,我真的可以付出努力。看到一致性和紀律的回報,我的心態得到了更新,可以充滿信心和強大的技術工具包來應對任何挑戰。
這次經歷標誌著我程式設計之旅的一個重要里程碑。我在這 30 天裡磨練的技能無疑將延續到我作為軟體工程師的職業生涯。
我為自己付出的努力感到自豪,也感謝在整個挑戰過程中為我加油、提供支持和智慧的朋友們。
以上が#aysofCode 9 月: DSA マスタリーへの私の旅の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。
