今年の 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 サイトの他の関連記事を参照してください。

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

この記事シリーズは、2017年半ばに最新の情報と新鮮な例で書き直されました。 このJSONの例では、JSON形式を使用してファイルに単純な値を保存する方法について説明します。 キー価値ペア表記を使用して、あらゆる種類を保存できます

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

コアポイント これは通常、メソッドを「所有」するオブジェクトを指しますが、関数がどのように呼び出されるかに依存します。 現在のオブジェクトがない場合、これはグローバルオブジェクトを指します。 Webブラウザでは、ウィンドウで表されます。 関数を呼び出すと、これはグローバルオブジェクトを維持しますが、オブジェクトコンストラクターまたはそのメソッドを呼び出すとき、これはオブジェクトのインスタンスを指します。 call()、apply()、bind()などのメソッドを使用して、このコンテキストを変更できます。これらのメソッドは、与えられたこの値とパラメーターを使用して関数を呼び出します。 JavaScriptは優れたプログラミング言語です。数年前、この文はそうでした

jQueryは素晴らしいJavaScriptフレームワークです。ただし、他のライブラリと同様に、何が起こっているのかを発見するためにフードの下に入る必要がある場合があります。おそらく、バグをトレースしているか、jQueryが特定のUIをどのように達成するかに興味があるからです

この投稿は、Android、BlackBerry、およびiPhoneアプリ開発用の有用なチートシート、リファレンスガイド、クイックレシピ、コードスニペットをコンパイルします。 開発者がいないべきではありません! タッチジェスチャーリファレンスガイド(PDF) Desigの貴重なリソース


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

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

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