#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は柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

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を構築し、バックエンドアプリケーションをデモンストレーションします。
