なぜ大手メーカーはアルゴリズムに注意を払うのですか?
Tencent、Baidu Ali、およびその他の国内の第一線の企業は、エンジニアを採用する過程でアルゴリズムとデータ構造に焦点を合わせます。ただし、アルゴリズムは習得が容易で習得が難しいため、多くのプログラマーを落胆させます。インタビューでは、アルゴリズムは常にアルゴリズムレベルで失敗し、適切な提案を得ることができません。
インタビューの中で、多くの候補者がアーキテクチャとフレームワークについて話しましたが、コードを書くと、彼らは彼らの本当のレベルを明らかにしました。率直に言って、基本的なスキルは十分にしっかりしていません。
実際、どの言語であっても、基本的なスキルはしっかりしている必要があり、コアはデータ構造とアルゴリズムである必要があります。このため、すべての主要なインタビューはアルゴリズムの質問をする必要があります。
知っておく必要があるのは:
- アルゴリズムは純粋にIQに関するものではなく、科学的かつ合理的な方法でトレーニングできるスキル、能力です。
- アルゴリズムを学ぶには、無謀に質問を書き留めることは不可能です。科学的な方法に従う必要があります。アルゴリズムのトレーニングは体系的なプロジェクトであり、段階的に実行する必要があります。すぐに成功することを熱望していると、問題の解決に失敗するため、フラストレーションや逆効果が発生します。
インタビュー段階の準備をするときは、LeetCodeのアルゴリズムの知識ポイントに従って分類トレーニングを実行してから、各企業で始まったホットトピックを確認する必要があります。最後に、通常はうまくいかない問題に焦点を当てます。
アルゴリズムに関しては、私が使用する参照ドキュメントは常にZuo先生のアルゴリズムドキュメントであり、プログラマーのグループもピラミッド構造になっています。基本的なアルゴリズムとデータ構造さえ知らない場合は、基本的に最下位レベルにあります。最下位レベルは低賃金を意味します。したがって、アルゴリズムを習得することが非常に重要です。アルゴリズムの問題解決スキルをすばやく習得したい場合は、次のドキュメントを参照してください。それはあなたに適しているに違いありません!すべての勤勉な「プログラムインストーラー」が満足のいくオファーを得ることができることを願っています!
プログラマーコードインタビューガイド
第1章スタックとキュー
- getMin関数を使用してスタックを設計する
- 2つのスタックで構成されるキュー
- 再帰関数とスタック操作のみを使用してスタックを反転する方法
- 猫と犬の列
- 1つのスタックを使用して、別のスタックソートを実装します
- スタックを使用して、ハノイの塔の問題を解決します
- ウィンドウ最大配列を生成する
- MaxTreeの配列を作成します
- 最大のサブマトリックスのサイズを見つける
- 最大値から最小値を引いた値がnumのサブ配列の数以下である
第2章リンクリストの問題
- 2つの順序付けられたリンクリストの共通部分を印刷します
- 単一リンクリストと二重リンクリストの下部からK番目のノードを削除します
- リンクリストの中間ノードとa / bのノードを削除します
- 一方向および二重にリンクされたリストを逆にする
- 単一リンクリストの一部を逆にする
- ジョセフの循環単一リンクリストの問題
- リンクされたリストがpalindrome構造であるかどうかを判別します
- 単一にリンクされたリストを特定の値に従って、小さい左、等しい中央、および大きい右の形式に分割します
- ランダムポインタノードでリンクリストをコピーします
- 2つの単一リンクリストは、追加のリンクリストを生成します
- 2つの単一リンクリストの共通部分に関する一連の問題
- 単一リンクリストのすべてのKノード間で順序を逆にします
- 順序付けられていない単一リンクリスト内の繰り返し値を持つノードを削除します
- 単一リンクリストで指定された値のノードを削除します
- 検索バイナリツリーを二重リンクリストに変換します
- 単一リンクリストの選択ソート
- -ノードを削除する奇妙な方法
- 順序付けられた循環単一リンクリストに新しいノードを挿入します
- 2つの順序付けられた単一リンクリストをマージします
- 左半分と右半分の単一リンクリストを再構築します
第3章バイナリツリーの問題
- バイナリツリーのプレオーダー、ミドルオーダー、ポストオーダートラバーサルを再帰的および非再帰的に実装します
- バイナリツリーの境界ノードを印刷します
- バイナリツリーをより直感的に印刷する方法
- バイナリツリーのシリアル化と逆シリアル化
- バイナリツリーをトラバースする神レベルの方法
- 累積合計がバイナリツリーで指定された値である最長のパス長を見つけます
- バイナリツリーで最大の検索バイナリツリーを見つける
- 検索バイナリツリーの基準を満たすバイナリツリーで最大のトポロジ構造を見つけます
- バイナリツリーのレイヤーバイレイヤー印刷とジグザグ印刷
- バイナリツリー内の2つの間違ったノードの検索を調整します
- t1ツリーにt2ツリーのすべてのトポロジ構造が含まれているかどうかを確認します
- t2ツリーと同じトポロジを持つサブツリーがt1ツリーにあるかどうかを確認します
- バイナリツリーがバランスの取れたバイナリツリーであるかどうかを判断します
- 順序付けられた配列を介してバランスの取れた検索バイナリツリーを生成します
- バイナリツリーでノードの後継を検索します
- バイナリツリーで2つのノードの最も近い共通の祖先を見つけます
- バイナリツリーノード間の最も近い共通の祖先のバッチクエリ問題を解決するためのTarjanアルゴリズムとユニオンクエリセット
- バイナリツリーノード間の最大距離
- プレオーダー、ミドルオーダー、ポストオーダーの2行2列の配列を組み合わせてバイナリツリーを再構築します
- プレオーダーおよびミドルオーダー配列からポストオーダー配列を生成する
- すべての異なるバイナリツリーをカウントして生成します
- 完全なバイナリツリー内のノードの数を数える
第4章再帰と動的プログラミング
- Fibonacciシリーズの問題の再帰と動的プログラミング
- マトリックスの最小パス合計]
- お金を交換するための最低通貨額
- お金を交換する方法の数
- 最も長く増加するサブシーケンス
- ハノイの塔
- 最長の一般的なサブシーケンスの問題
- 最長の一般的なサブストリングの問題
- 最小編集コスト
- 文字列のインターリーブされた構成
- ダンジョンとドラゴンのゲームの問題
- 文字の組み合わせに変換された文字列の数
- 式の期待される結果のコンポーネントの数
- インラインカードゲームの問題
- ジャンプゲーム
- アレイ内で最も長い連続シーケンス
- Nクイーン問題
第5章文字列の問題
- 2つのストリングが屈曲であるかどうかを判別します
- 文字列内のサブ文字列の数の合計
- 文字列内のk個の連続する0を持つサブ文字列を削除します
- 2つの文字列が相互に回転する単語であるかどうかを確認します
- 整数文字列を整数値に変換する
- 文字列に連続して表示される指定された文字列を置き換えます
- 文字列統計文字列
- 文字配列内のすべての文字が1回だけ表示されるかどうかを確認します
- 順序付けられているが空の配列で文字列を検索する
- 弦の調整と交換
- リバースストリング
- アレイ内の2つのストリング間の最小距離
- 文字列全体がpalindrome文字列になるように、最小の文字を追加します
このアルゴリズムドキュメントが必要なブラザー、転送するのを手伝って、それをサポートするためにエディタに従ってください、そしてメソッドを取得するためにプライベートメッセージ[666]
第6章ビッグデータとスペースの制限
- ブルームフィルターを理解する
- 2GBのメモリのみを使用して、20億の整数の中で最も頻繁な数を見つけます
- 40億の非負の整数の中から欠落している数を見つけます
- 100億のURLで重複するURLを見つけることと検索用語のトップKの問題
- 2回出現する数と、40億個の非負の整数の中のすべての数の中央値を見つけます
- -一貫したハッシュアルゴリズムの基本原則
第7章ビット操作
- 2つの整数の値を交換するために追加の変数は使用されません
- 比較や判断をせずに、2つの数値のうち大きい方を見つけます
- 整数の加算、減算、乗算、除算の操作を実現するには、算術演算なしでビット演算のみを使用してください
- 整数のバイナリ表現には1がいくつありますか
- 他の数が偶数回出現する配列内の奇数回の出現を見つけます
- 他の数字がk回出現する配列で1回だけ出現する数字を見つける
第8章配列とマトリックスの問題
- サークル印刷マトリックス
- 正方形のマトリックスの上部を時計回りに90°回転させます
- 「ジグザグ」印刷マトリックス
- 順序付けられていない配列でkの最小数を見つけます
- 3月にE画像を手作業でスキャンして、アレイの長さを最大にします
- 配列内でN / Kより大きいオカレンスの数を見つけます
- すべての行と列を順番に並べたマトリックスで番号を検索します
- 統合可能な最長のサブアレイの長さ
- 合計が指定された値であるすべてのダブルとトリプルを、繰り返さずにソートされた配列に出力します
- 累積合計がソートされていない正の配列内の指定された値である最長のサブ配列の長さ
- ソートされていない配列に値が与えられていない累積合計を持つ最長のサブ配列シリーズの問題
- 累積合計がソートされていない配列内の指定された値以下である最長のサブ配列の長さ
- 配列の小計を計算する
- 自然数の配列のソート
- 奇数の添え字はすべて奇数または偶数の添え字は偶数です)
- サブアレイの最大累積合計
- サブマトリックスの最大累積合計
- アレイで見つかりました-ローカル最小位置
- アレイ内のサブアレイの最大累積積
- N配列の最大のTopKを印刷します
- 境界線が1の最大正方形サイズ
- この位置の値を含まない累積配列
- アレイパーティションの調整
- 最短パス値を見つける
- 配列に表示されない最小の正の整数
- 配列がソートされた後の隣接する番号間の最大差
第9章その他のトピック
- 5ランダムから7ランダムとその拡張
- -2つの数値の最大の共通除数を見つけるための行コード
- 要因についての2つの質問
- ポイントが長方形の内側にあるかどうかを確認します
- ポイントが三角形の内側にあるかどうかを確認します
- 折り紙問題
- 貯水池アルゴリズム
- setAll関数を使用してハッシュテーブルを設計する
- 最大のleftMaxとrightMaxの差の絶対値
- 変更可能なキャッシュ構造を設計する
- RandomPool構造を設計する
- 間隔(0、x)で数値が発生する確率を調整します
- パス配列は統計配列になります
- 正の配列の構成不可能な最小の合計
- -文字列と数字の対応の種類
- 1からnまでの1の発生数
- N個の数字から中程度の確率でM個の数字を印刷する
- 番号がパリンドロームであるかどうかを判断する
- 順序付けられた回転配列で最小値を見つける
- 順序付けられた回転配列で番号を見つける
- 英語と中国語の数字
- キャンディーの問題
- -メッセージを受信および印刷するための構造設計
- 拡張の負担のないヒープ構造を設計する
- いつでもデータストリームの中央値を見つける
- 同じ長さの2つのソートされた配列で上位中央値を見つけます
- 2つのソートされた配列でK番目に小さい数を見つけます
- 2つの順序付けられた配列間で加算および合計するTOPK問題
- 発生のTOPK問題
- マナチャーアルゴリズム
- KMРアルゴリズム
- チェスピースの問題
- 画家の問題
- 郵便局の場所の問題
最後に書く
今日、アルゴリズムの質問は、それが書かれているかコンピュータ化されているかにかかわらず、主要な国内外のIT企業にとって必須です。このドキュメントはすべて乾物であり、インタビューツールとして、ターゲットを絞って簡単な方法で深遠なことを説明しています。これは、職場のベテランと職場に不慣れな新卒者の両方にとって珍しい試験準備マニュアルです。ズオ先生はまた、留学経験や国内外の有名企業の経験があり、アルゴリズムが大好きで熟練しており、著名企業のニーズと求職者の能力不足との「隔たり」を深めています。本書は両者をつなぐ「架け橋」に過ぎません。これは私が今まで読んだ中で最高のアルゴリズムノートです、私はそれを強くお勧めします!
このアルゴリズムドキュメントが必要なブラザー、記事のように助けて、それをサポートするためにエディタに従ってください。メソッドを取得するためにアシスタントvxを追加してください