ライブコーディング面接に挑もうとしているあなたは、どんな問題が出るのか不安を感じているかもしれません。実は、出題される問題にはある程度のパターンがあり、そのパターンを事前に把握しておくだけで対応力は格段に上がります。闇雲にLeetCodeを解きまくるよりも、頻出パターンを理解して戦略的に準備するほうがはるかに効率的です。
この記事では、ライブコーディング面接で繰り返し出題されるアルゴリズムパターンを体系的に整理し、それぞれの考え方や典型的な出題例を紹介します。パターンを自分の引き出しに入れておくことで、初見の問題にも落ち着いて取り組めるようになるはずです。
ライブコーディング面接でアルゴリズムパターンが重要な理由
ライブコーディング面接で問われているのは、単純な暗記力ではありません。面接官が本当に見たいのは、あなたが問題をどう分解し、どのようなアプローチで解決に向かうかという思考プロセスそのものです。そのため、個別の問題を丸暗記するよりも、汎用的なパターンを理解しておくほうが圧倒的に応用が利きます。
実際のところ、大手テック企業の面接で出題される問題の多くは、5〜10個程度の基本パターンの組み合わせで構成されています。たとえば「配列から条件を満たすペアを見つける」という問題は、ソートしてから二分探索を使うか、ハッシュマップで補数を管理するか、あるいはツーポインターで両端から走査するかといった定番のアプローチに帰着します。パターンを知っていれば、問題を見た瞬間に「これはあのパターンだ」と方針が立つわけです。
ところで、パターンを知っているだけでは不十分で、それをライブの場で実装できるかどうかが本番の勝負です。そのため、各パターンについて少なくとも2〜3問は実際にコードを書いて練習しておくことをおすすめします。手が覚えている状態にしておくと、面接中の緊張した場面でもスムーズにコーディングを進められます。
二分探索パターン - ソート済みデータの高速検索
二分探索は、ソート済みの配列やある種の単調性がある探索空間に対して、対象を半分ずつ絞り込んでいく手法です。計算量がO(log n)と非常に効率的なため、面接では頻繁に出題されます。単純な「配列から値を探す」という形式だけでなく、「条件を満たす最小値を求める」といった応用形も多く見られます。
典型的な出題としては、回転ソート配列での探索があります。たとえば[4, 5, 6, 7, 0, 1, 2]のようにソート済み配列が途中で回転している場合でも、二分探索の考え方を応用して対象の要素を見つけることができます。ポイントは、中間地点で配列のどちら側がソートされているかを判定し、探索範囲を適切に絞ることです。この問題に初めて遭遇すると戸惑いがちですが、パターンとして知っていれば冷静に対処できます。
もうひとつ押さえておきたいのが、「答えに対して二分探索をする」というテクニックです。たとえば「最大値を最小化する」タイプの問題では、答えの候補を二分探索で絞り込みながら、各候補が条件を満たすかどうかを検証するアプローチが有効です。この「答えで二分探索」という発想は、知らないとなかなか思いつかないものですが、一度理解すると驚くほど多くの問題に適用できます。
二分探索のコードを書く際に注意したいのが、境界条件の扱いです。leftとrightの初期値、ループの終了条件、midの更新方法を少しでも間違えると無限ループに陥ったり、答えがひとつずれたりします。面接中にバグを仕込まないよう、自分の中で「二分探索のテンプレート」を確立しておくことが大切です。
スライディングウィンドウパターン - 連続部分列の効率的な処理
スライディングウィンドウは、配列や文字列の連続する部分列に関する問題を効率的に解くためのテクニックです。ウィンドウの左端と右端を管理しながら、条件に応じてウィンドウを伸縮させることで、素朴なO(n^2)のアプローチをO(n)に改善できます。
このパターンが活躍する代表的な問題が、「重複のない最長部分文字列の長さを求める」という問題です。右端を1文字ずつ進めながら、各文字の出現をハッシュマップで記録し、重複が検出されたら左端を重複が解消するまで進めます。ウィンドウ内の文字が常にユニークであることを保証しながら、ウィンドウの最大サイズを記録していくわけです。
スライディングウィンドウの問題で面接官が注目するのは、ウィンドウの拡張と縮小の条件を正確に定義できるかどうかです。たとえば「合計がK以下の最長部分配列」であれば、右端を進めて合計がKを超えたら左端を進めて合計を減らすという操作になります。この条件の設定を間違えると答えがずれてしまうため、問題を読んだ段階でウィンドウの不変条件を明確にしておくことが重要です。
ところで、スライディングウィンドウには固定長と可変長の2種類があります。「サイズKの部分配列の最大合計」のような問題は固定長ウィンドウで、右端を1つ進めたら左端も1つ進めるだけです。一方、先ほどの「条件を満たす最長/最短部分列」は可変長ウィンドウで、条件に応じて伸縮します。どちらのタイプかを見極められると、実装がスムーズになります。
ツーポインターパターン - 配列の両端から攻める戦略
ツーポインターは、2つのポインター(インデックス)を使って配列を効率的に走査する手法です。ソート済み配列に対して使われることが多く、ブルートフォースでO(n^2)になる問題をO(n)で解ける場合があります。面接では非常に頻繁に出題されるパターンのひとつです。
代表的な出題が「Two Sum(ソート済み配列版)」です。ソート済みの配列から合計がターゲットになるペアを見つける問題で、左端と右端にポインターを置いて、合計がターゲットより小さければ左ポインターを進め、大きければ右ポインターを戻します。この操作を合計がターゲットに一致するまで繰り返すだけです。シンプルですが、このパターンを知っているかどうかで解答のスピードが大きく変わります。
ツーポインターの応用として押さえておきたいのが、「三数の和(3Sum)」の問題です。配列から合計がゼロになる3つの組み合わせをすべて見つけるという問題で、外側のループで1つの要素を固定し、残りの2要素をツーポインターで探すアプローチが定番です。重複の排除が少し厄介ですが、ソート済みであることを利用して同じ値をスキップする処理を入れれば対処できます。
ツーポインターにはもうひとつ、同じ方向に進む「速い・遅いポインター」のバリエーションもあります。リンクリストのサイクル検出で有名なフロイドのアルゴリズムがこのパターンです。速いポインターが2ステップ、遅いポインターが1ステップずつ進み、サイクルがあれば必ずどこかで出会うという仕組みです。配列やリンクリストの問題で「サイクル」「中間点」「末尾からN番目」といったキーワードが出てきたら、このパターンを思い出してください。
深さ優先探索と幅優先探索 - グラフとツリーの走査
グラフやツリーの問題は、ライブコーディング面接の定番中の定番です。深さ優先探索(DFS)と幅優先探索(BFS)は、これらの構造を走査するための基本手法であり、どちらも確実に使いこなせるようにしておく必要があります。
DFSは再帰やスタックを使って、ひとつの経路を可能な限り深く探索してから戻る手法です。二分木の問題では特に出番が多く、「最大深さを求める」「パスの合計が特定の値になるか判定する」「木を反転させる」といった問題はほぼDFSで解けます。再帰で書くとコードが非常にシンプルになるのが魅力ですが、面接では再帰の仕組みを理解しているかどうかも問われるため、呼び出しの流れを自分の言葉で説明できるようにしておきましょう。
一方、BFSはキューを使って、起点から近い順にノードを探索する手法です。「二分木のレベルごとの走査」「最短経路の探索」「グリッド上の最短距離」といった問題ではBFSが第一選択になります。とくにグリッド問題では、上下左右の隣接セルに移動しながら目的地を探す形式が頻出です。訪問済みのセルを管理する配列を用意しておかないと無限ループに陥るので、その点は忘れないようにしてください。
そういえば、DFSとBFSのどちらを使うべきか迷う場面もあるかもしれません。大まかな指針としては、最短経路を求める問題ではBFS、すべてのパスを列挙する問題やバックトラッキングが必要な問題ではDFSが向いています。ただし、どちらでも解ける問題も多いので、両方のアプローチで実装できるように練習しておくと安心です。
動的計画法(DP)パターン - 部分問題の結果を再利用する
動的計画法は、ライブコーディング面接で最も手強いパターンのひとつです。問題を小さな部分問題に分解し、その結果をメモ化して再利用することで、指数的な計算量を多項式時間に抑えます。面接で出題されるDP問題は、状態の定義と遷移式を正しく設計できるかがポイントです。
入門レベルのDP問題として定番なのが、フィボナッチ数列やコイン問題、階段の上り方といったテーマです。たとえば「1段または2段ずつ上れる階段をn段上る方法は何通りか」という問題では、dp[i] = dp[i-1] + dp[i-2]という遷移式が成り立ちます。この程度であれば、DPに慣れていない人でも理解しやすいでしょう。
実際の面接で出題されるDP問題はもう少し複雑で、「最長増加部分列(LIS)」「ナップサック問題」「編集距離」などがよく見られます。これらの問題では、状態を何にするか(配列のインデックス、残りの容量、文字列の位置など)を適切に定義することが第一歩です。状態が決まれば、各状態からの遷移を考え、最終的に求めたい答えがどの状態に対応するかを明確にします。
DPの問題に取り組むときのコツは、まずトップダウン(再帰+メモ化)で考えることです。再帰的に問題を分解し、重複する部分問題をメモ化テーブルに記録するアプローチは、遷移式を直感的に理解しやすいというメリットがあります。面接でも、最初にトップダウンで解法を説明してから、必要に応じてボトムアップ(テーブルを前から埋める)に変換するという流れが自然です。面接官にも思考プロセスが伝わりやすくなります。
ハッシュマップパターン - 検索と集計を高速化する
ハッシュマップ(辞書・連想配列)は、ライブコーディング面接で最も頻繁に登場するデータ構造です。要素の検索・挿入・削除がO(1)で行えるため、多くの問題で計算量を劇的に改善できます。面接官も「まずハッシュマップで解けないか考える」という思考を期待していることが多いです。
最も有名な出題が「Two Sum」です。配列の中からターゲットの合計になるペアを見つける問題で、各要素を走査しながら「ターゲットから現在の値を引いた補数」がハッシュマップに存在するか確認します。存在すればペアが見つかったことになり、存在しなければ現在の値をハッシュマップに登録して次に進みます。この問題はシンプルですが、ハッシュマップの使い方の本質を凝縮しています。
ハッシュマップが威力を発揮するもうひとつの場面が、頻度カウントです。「文字列中の各文字の出現回数を数える」「アナグラムを判定する」「最も頻度の高い要素を見つける」といった問題では、ハッシュマップで出現回数を管理するのが定番の手法です。とくにアナグラム判定では、2つの文字列の頻度マップが一致するかどうかを比較するだけで済みます。
そういえば、ハッシュマップとセットの使い分けも面接では問われることがあります。要素の存在チェックだけが必要な場合はセットで十分ですが、各要素に紐づく値(出現回数やインデックスなど)を管理する必要がある場合はハッシュマップが必要です。問題の要件に応じて適切なデータ構造を選択できることも、面接官が評価するポイントのひとつです。
バックトラッキングパターン - すべての組み合わせを効率的に探索する
バックトラッキングは、条件を満たすすべての組み合わせやパターンを列挙する問題で活躍する手法です。DFSの一種とも言え、選択肢を順番に試しては「これは駄目だ」と判断したら前の状態に戻って別の選択を試みるという動きをします。面接では、「順列の列挙」「組み合わせの生成」「数独の解法」「N-Queen問題」などで出題されます。
バックトラッキングの基本的な構造は、再帰関数の中で「現在の選択を追加→再帰呼び出し→選択を元に戻す」という3ステップを繰り返すことです。たとえば数字の順列を生成する場合、未使用の数字から1つ選んで現在の順列に追加し、再帰的に残りの数字で順列を生成します。再帰から戻ったら追加した数字を取り除いて、別の数字を試します。
面接でバックトラッキングの問題を解く際に重要なのが、枝刈り(pruning)の考え方です。条件を満たす見込みがない選択肢を早い段階で排除することで、探索空間を大幅に削減できます。たとえば組み合わせの合計が特定の値を超えた時点で、それ以上の探索を打ち切るといった処理です。枝刈りを適切に実装できるかどうかで、コードの効率が大きく変わります。
バックトラッキングの問題では、面接官があなたに期待しているのは「力技で全探索して終わり」ではなく、効率的な探索戦略を提案できるかどうかです。まず素朴なバックトラッキングで解法を示し、そのうえで「ここに枝刈りを入れることで計算量を削減できます」と説明できると、高い評価を得やすくなります。
貪欲法パターン - 局所最適から全体最適を導く
貪欲法は、各ステップで局所的に最適な選択を行うことで、全体的にも最適な解を得ようとする手法です。常に正しい解が得られるわけではありませんが、特定の条件を満たす問題では最適解を保証できます。面接では、区間スケジューリングや最小コイン問題など、比較的直感的に理解しやすい問題で出題されることが多いです。
典型的な貪欲法の問題として、「区間スケジューリング」があります。複数の区間(開始時刻と終了時刻のペア)が与えられ、重ならない区間を最大数選ぶという問題です。解法は、終了時刻が早い順にソートし、前の区間と重ならなければ選択するという単純なものです。この貪欲な選択が最適解を保証することは数学的に証明できますが、面接では「なぜこの貪欲な選択が正しいのか」を説明できることも重要です。
貪欲法で気をつけたいのは、「貪欲に見えるけれど実は貪欲法では解けない」問題の存在です。たとえばナップサック問題の0-1バージョン(アイテムを分割できない場合)は、貪欲法では最適解が得られず、DPが必要になります。面接で貪欲法を提案するときは、なぜ局所最適が全体最適につながるのかを論理的に説明できるかどうかがカギです。
ところで、面接で貪欲法の問題が出た場合、最初から貪欲法だと気づかないことも珍しくありません。そんなときは、まずブルートフォースやDPのアプローチを考えてから、「もっと効率的にできないか」と考える過程で貪欲法にたどり着くのが自然な流れです。面接官もそのような思考の発展を見たいと思っているので、焦らずに段階的にアプローチを洗練させていきましょう。
面接本番でパターンを活用するための実践的なアドバイス
ここまで紹介したパターンを面接本番で活かすには、単に知識として覚えるだけでは不十分です。問題を見てから解答するまでの「思考のフレームワーク」を自分の中に確立しておくことが大切です。
問題を出されたら、まず入力と出力の形式、制約条件を確認します。配列の長さが10^5ならO(n log n)以下のアルゴリズムが必要ですし、10^3程度ならO(n^2)でも許容範囲です。制約条件から使えるパターンを絞り込むことで、方針決定の時間を短縮できます。
パターンを特定したら、すぐにコードを書き始めるのではなく、まず面接官にアプローチを説明しましょう。「この問題はスライディングウィンドウで解けると思います。ウィンドウの条件はこうで、計算量はO(n)になります」と説明してから実装に入ると、方針の誤りを早期に指摘してもらえますし、コミュニケーション能力の評価にもつながります。
最後に、パターンの練習方法について触れておきます。各パターンにつき3〜5問を集中的に解くのが効果的です。同じパターンの問題を連続して解くことで、パターンの本質と応用の幅が理解できます。また、解いた問題を1週間後にもう一度解き直すと、長期記憶に定着しやすくなります。面接までの限られた時間を最大限に活用して、自信を持って本番に臨んでください。
まとめ
ライブコーディング面接で出題される問題は、二分探索、スライディングウィンドウ、ツーポインター、DFS/BFS、動的計画法、ハッシュマップ、バックトラッキング、貪欲法といった基本パターンの組み合わせで構成されています。これらのパターンを体系的に理解し、それぞれ数問ずつ実践練習を積んでおくことが、面接対策の最も効率的なアプローチです。
大切なのは、パターンの暗記ではなく、問題の構造を見抜いて適切なパターンを選択できる力を身につけることです。日々の練習では、問題を見た瞬間にパターンを特定する訓練を意識してみてください。そうすれば、本番で初見の問題に出会っても、落ち着いて自分の引き出しから最適なアプローチを取り出せるようになるはずです。