Anki フラッシュカードを使用した、継続的に更新される 120 以上のインタラクティブなテスト駆動のコーディング チャレンジ。
課題は、コーディングのインタビューで見つかったアルゴリズムとデータ構造に焦点を当てています。
各課題には、次のような 1 つ以上の参照ソリューションがあります。
チャレンジでは、最適なソリューションに到達するのに役立つオンデマンドの増分ヒントが間もなく提供されるようになります。
ノートには以下の詳細も記載されています。
また、さまざまなデータ構造とアルゴリズムの単体テスト済みのリファレンス実装も含まれています。
付属の Anki フラッシュカード デッキでは、重要な概念を保持するために間隔をあけて繰り返します。
外出先での使用に最適です。
システム設計およびオブジェクト指向設計の面接の準備に役立つリソースをお探しですか?
姉妹リポジトリの The System Design Primer をチェックしてください。これには追加の Anki デッキが含まれています。
各チャレンジには 2 つのノートブックがあり、1 つは解決するための単体テストが記載されたチャレンジ ノートブック、もう 1 つは参照用のソリューション ノートブックです。
形式: チャレンジ カテゴリ - チャレンジ数
総チャレンジ数: 120
次のデータ構造の単体テスト済み、完全に機能する実装:
以下のアルゴリズムの単体テスト済み、完全に機能する実装:
画像クレジット
チャレンジ | 静的ノートブック |
---|---|
文字列に一意の文字が含まれているかどうかを判断する | 課題 │ 解決策 |
文字列が別の文字列の順列であるかどうかを判断する | 課題 │ 解決策 |
文字列が別の文字列の回転であるかどうかを判断する | 課題 │ 解決策 |
文字列を圧縮する | 課題 │ 解決策 |
文字列内の文字を反転する | 課題 │ 解決策 |
2 つの文字列が与えられた場合、単一の異なる文字を見つけます | 課題 │ 解決策 |
合計が特定の値になる 2 つのインデックスを見つける | 課題 │ 解決策 |
ハッシュテーブルを実装する | 課題 │ 解決策 |
フィズバズを実装する | 課題 │ 解決策 |
文字列内で繰り返されていない最初の文字を検索します。 | 貢献する │ 貢献する |
文字列内の指定された文字を削除します | 貢献する │ 貢献する |
文字列内の単語を反転する | 貢献する │ 貢献する |
文字列を整数に変換する | 貢献する │ 貢献する |
整数を文字列に変換する | 貢献する │ 貢献する |
チャレンジを追加する | 貢献する │ 貢献する |
チャレンジ | 静的ノートブック |
---|---|
リンクされたリストから重複を削除する | 課題 │ 解決策 |
リンクされたリストの最後から k 番目の要素を検索します。 | 課題 │ 解決策 |
リンクされたリストの途中にあるノードを削除する | 課題 │ 解決策 |
指定された値を中心にリンクされたリストを分割する | 課題 │ 解決策 |
数値がリンク リストに格納されている 2 つの数値を加算します。 | 課題 │ 解決策 |
リンクリストループの開始点を見つける | 課題 │ 解決策 |
リンクされたリストが回文であるかどうかを判断する | 課題 │ 解決策 |
リンクリストを実装する | 課題 │ 解決策 |
リストが循環か非循環かを判断する | 貢献する │ 貢献する |
チャレンジを追加する | 貢献する │ 貢献する |
チャレンジ | 静的ノートブック |
---|---|
単一の配列を使用して n 個のスタックを実装する | 課題 │ 解決策 |
最小要素を追跡するスタックを実装する | 課題 │ 解決策 |
容量制限のあるスタックのリストをラップするスタック クラスのセットを実装する | 課題 │ 解決策 |
2 つのスタックを使用してキューを実装する | 課題 │ 解決策 |
別のスタックをバッファとして使用してスタックをソートする | 課題 │ 解決策 |
スタックを実装する | 課題 │ 解決策 |
キューを実装する | 課題 │ 解決策 |
配列を利用した優先キューを実装する | 課題 │ 解決策 |
チャレンジを追加する | 貢献する │ 貢献する |
チャレンジ | 静的ノートブック |
---|---|
ツリーに深さ優先検索 (事前、順序内、事後) を実装する | 課題 │ 解決策 |
ツリーに幅優先検索を実装する | 課題 │ 解決策 |
木の高さを決める | 課題 │ 解決策 |
ソートされた配列から最小の高さの二分探索ツリーを作成します | 課題 │ 解決策 |
バイナリ ツリーのレベルごとにリンク リストを作成する | 課題 │ 解決策 |
二分木のバランスが取れているかどうかを確認する | 課題 │ 解決策 |
ツリーが有効な二分探索ツリーであるかどうかを判断する | 課題 │ 解決策 |
二分探索ツリーで指定されたノードの順序どおりの後続ノードを検索します。 | 課題 │ 解決策 |
二分探索ツリーで 2 番目に大きいノードを見つける | 課題 │ 解決策 |
最も低い共通祖先を見つける | 課題 │ 解決策 |
二分木を反転する | 課題 │ 解決策 |
二分探索ツリーを実装する | 課題 │ 解決策 |
最小ヒープを実装する | 課題 │ 解決策 |
トライを実装する | 課題 │ 解決策 |
グラフに深さ優先検索を実装する | 課題 │ 解決策 |
グラフに幅優先検索を実装する | 課題 │ 解決策 |
グラフ内の 2 つのノード間にパスがあるかどうかを判断する | 課題 │ 解決策 |
グラフを実装する | 課題 │ 解決策 |
プロジェクトと依存関係のリストからビルド順序を見つけます。 | 課題 │ 解決策 |
重み付きグラフで最短経路を見つけます。 | 課題 │ 解決策 |
重み付けされていないグラフで最短パスを見つけます。 | 課題 │ 解決策 |
チャレンジを追加する | 貢献する │ 貢献する |
チャレンジ | 静的ノートブック |
---|---|
選択ソートを実装する | 課題 │ 解決策 |
挿入ソートを実装する | 課題 │ 解決策 |
クイックソートを実装する | 課題 │ 解決策 |
マージソートを実装する | 課題 │ 解決策 |
基数ソートを実装する | 課題 │ 解決策 |
すべてのアナグラムが隣り合うように文字列の配列を並べ替えます。 | 課題 │ 解決策 |
ソートされ回転された配列内の項目を検索する | 課題 │ 解決策 |
並べ替えられたマトリックスで項目を検索する | 課題 │ 解決策 |
n 個の整数の入力にない int を検索します | 課題 │ 解決策 |
ソートされた配列 A、B が与えられた場合、ソートされた順序で B を A にマージします。 | 課題 │ 解決策 |
安定した選択ソートを実装する | 貢献する │ 貢献する |
不安定なソートを安定化する | 貢献する │ 貢献する |
効率的なクイックソートのインプレース版を実装する | 貢献する │ 貢献する |
2 つのソートされた配列が与えられた場合、ソートされた順序で一方を他方にマージします。 | 貢献する │ 貢献する |
回転およびソートされた整数の配列内の要素を検索します。 | 貢献する │ 貢献する |
チャレンジを追加する | 貢献する │ 貢献する |
チャレンジ | 静的ノートブック |
---|---|
フィボナッチを再帰的、動的、反復的に実装する | 課題 │ 解決策 |
ナップザックに入れたアイテムを最大化する | 課題 │ 解決策 |
ナップザックに入れられた無制限のアイテムを最大化する | 課題 │ 解決策 |
最長の共通部分列を見つける | 課題 │ 解決策 |
最長の増加部分列を見つける | 課題 │ 解決策 |
行列乗算のコストを最小限に抑える | 課題 │ 解決策 |
k個のトランザクションで株価を最大化する | 課題 │ 解決策 |
与えられたコインの配列に対して n セントを表す方法の最小数を求めます。 | 課題 │ 解決策 |
与えられたコインの配列から n セントを表現する一意の数を見つけます | 課題 │ 解決策 |
n 組のかっこの有効な組み合わせをすべて出力します。 | 課題 │ 解決策 |
迷路をナビゲートする | 課題 │ 解決策 |
セットのすべてのサブセットを印刷する | 課題 │ 解決策 |
文字列のすべての順列を出力します | 課題 │ 解決策 |
配列内のマジックインデックスを検索します。 | 課題 │ 解決策 |
n 歩を駆け上がる方法の数を求めてください | 課題 │ 解決策 |
3 つのタワーと N 個のディスクを備えたハノイの塔を実装する | 課題 │ 解決策 |
階乗を再帰的、動的、反復的に実装する | 貢献する │ 貢献する |
ソートされた整数配列に対して二分検索を実行します。 | 貢献する │ 貢献する |
文字列のすべての組み合わせを出力します | 貢献する │ 貢献する |
ペイント塗りつぶし機能を実装する | 貢献する │ 貢献する |
1、5、10、25 セント硬貨が与えられた場合に、n セントを表すすべての順列を見つけます。 | 貢献する │ 貢献する |
チャレンジを追加する | 貢献する │ 貢献する |
チャレンジ | 静的ノートブック |
---|---|
素数のリストを生成する | 課題 │ 解決策 |
デジタル ルートを見つける | 課題 │ 解決策 |
O(1) で挿入、最大、最小、平均、モードをサポートするクラスを作成する | 課題 │ 解決策 |
数値が 2 の累乗かどうかを判断する | 課題 │ 解決策 |
+ または - 記号を付けずに 2 つの数値を加算します | 課題 │ 解決策 |
+ または - 記号を付けずに 2 つの数値を減算します。 | 課題 │ 解決策 |
数値が素数かどうかを確認する | 貢献する │ 貢献する |
デカルト平面上の 2 つの線が交差するかどうかを判断します | 貢献する │ 貢献する |
加算のみを使用して、int の乗算、減算、除算を実装します。 | 貢献する │ 貢献する |
素因数が 3、5、7 のみとなる k 番目の数値を見つけます。 | 貢献する │ 貢献する |
チャレンジを追加する | 貢献する │ 貢献する |
チャレンジ | 静的ノートブック |
---|---|
一般的なビット操作操作を実装する | 課題 │ 解決策 |
a を b に変換するために反転するビット数を決定する | 課題 │ 解決策 |
画面上に線を引く | 課題 │ 解決策 |
ビットを反転して最長の 1 のシーケンスを最大化します。 | 課題 │ 解決策 |
次に大きい数値と次に小さい数値を取得します | 課題 │ 解決策 |
2 つの 2 進数を結合する | 課題 │ 解決策 |
整数の奇数ビットと偶数ビットを交換する | 課題 │ 解決策 |
0 から 1 までの数値のバイナリ表現を出力します。 | 課題 │ 解決策 |
指定された整数の 2 進数表現における 1 の数を決定します。 | 貢献する │ 貢献する |
チャレンジを追加する | 貢献する │ 貢献する |
チャレンジ | 静的ノートブック |
---|---|
最大 k 個の異なる文字を含む最長の部分文字列を検索します | 課題 │ 解決策 |
3 つの数値の最大の積を求める | 課題 │ 解決策 |
1回の買いと1回の売りで株の利益を最大化する | 課題 │ 解決策 |
リスト内のすべてのゼロを最後に移動します | 課題 │ 解決策 |
1 つおきの int の積を求めます | 課題 │ 解決策 |
入口と出口のリストを基に、最も混雑する時間帯を見つける | 課題 │ 解決策 |
島の周囲を決定する | 課題 │ 解決策 |
ライセンスキーのフォーマット | 課題 │ 解決策 |
最長の絶対ファイルパスを見つける | 課題 │ 解決策 |
タプル範囲のマージ | 課題 │ 解決策 |
Cookie を割り当てる | 課題 │ 解決策 |
Nim で勝てるかどうかを判断する | 課題 │ 解決策 |
身代金メモの作成に雑誌が使用された可能性があるかどうかを確認する | 課題 │ 解決策 |
文が画面に何回収まるかを調べる | 課題 │ 解決策 |
ユートピアの木 | 課題 │ 解決策 |
xor の最大化 | 課題 │ 解決策 |
チャレンジを追加する | 貢献する │ 貢献する |
interactive-coding-challenges # Repo
├─ arrays_strings # Category of challenges
│ ├─ rotation # Challenge folder
│ │ ├─ rotation_challenge.ipynb # Challenge notebook
│ │ ├─ rotation_solution.ipynb # Solution notebook
│ │ ├─ test_rotation.py # Unit test*
│ ├─ compress
│ │ ├─ compress_challenge.ipynb
│ │ ├─ compress_solution.ipynb
│ │ ├─ test_compress.py
│ ├─ ...
├─ linked_lists
│ ├─ palindrome
│ │ └─ ...
│ ├─ ...
├─ ...
*ノートブック (.ipynb) は、関連する単体テスト (.py) ファイルの読み取り/書き込みを行います。
この README には、インストール不要でリポジトリのコンテンツの動的なノートブックをオンラインでホストする Binder へのリンクが含まれています。
走る:
pip install jupyter
開発環境をより最適にセットアップするための詳細な手順、スクリプト、ツールについては、dev-setup リポジトリを確認してください。
ノートブックのインストールの詳細については、ここの指示に従ってください。
IPython/Jupyter Notebook の詳細については、こちらをご覧ください。
チャレンジはIPython/Jupyter Notebookの形式で提供され、 Python 2.7 および Python 3.x でテストされています。
IPython/Jupyter Notebook をインストールする必要がある場合は、「Notebook のインストール」セクションを参照してください。
課題のノートブックを実行します。
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
これにより、Web ブラウザが起動し、チャレンジ カテゴリのリストが表示されます。
pdb を使用してソリューションをデバッグするには、次のチケットを参照してください。
注: あなたのソリューションがソリューション ノートブックにリストされているものと異なる場合は、他の人があなたの成果から恩恵を受けることができるように、プル リクエストを送信することを検討してください。詳細については、貢献ガイドラインを参照してください。
課題、解決策、単体テストは、 IPython/Jupyter Notebookの形式で提供されます。
貢献は大歓迎です!
以下の方法の詳細については、貢献ガイドラインを確認してください。
問題、質問、コメントがございましたら、お気軽にご連絡ください。
私の連絡先情報は私の GitHub ページにあります。
このリポジトリ内のコードとリソースは、オープン ソース ライセンスに基づいて提供されています。これは私の個人的なリポジトリであるため、私のコードとリソースに対するライセンスは私からのものであり、私の雇用主 (Facebook) からのものではありません。
Copyright 2015 Donne Martin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.