Skip to content
A bird sitting on a nest of eggs. GitHub Twitter

【LeetCode】 Translation of how to solve leetcode problems efficiently into Japanese

数年前、トップティアのテック企業で新しい仕事を探していたとき、LeetCode というリソースを見つけました。正直なところ、LeetCode はインタビュー形式のアルゴリズム問題を解く力を向上させるために使ったツールの中で、圧倒的に効果的でした。これは、LeetCode を使ってどのように価値を最大化するかについて、私の経験を基にした短いガイドです。

この記事の目的は、トップテック企業に入るための方法を教えるのではなく、アルゴリズム問題解決スキルを習得する方法を学ぶのに役立てることです。これは、あなたが望む仕事を得るのに役立ちます。まず、何かを上達させたい場合に適用される一般的なヒントから始めましょう。

  • 一貫性が鍵です。できるだけ早く始めて、毎日行うことが大切です。1 日 1 時間やるのが、日曜日だけ 7 時間やるよりも良いです。
  • 積極的な改善に焦点を当てる。つまり、オートパイロットで動いていたり、集中していなかったら、一度やめて後で戻ってくることも大丈夫です。
  • すべての人が異なり、ワンサイズフィットオールではありません。だから、この(または他の)ガイドから外れることも自由です。

一般的な SWE ロールでは、アルゴリズムのタイプの問題に焦点を当てるべきです。数年前、これらは唯一の問題でしたが、それ以来、データベース、シェル、並行処理が追加されました。問題セットでアルゴリズムの問題だけを表示するようにします。

https://leetcode.com/problemset/algorithms/

これがあなたの「ホームベース」となりますので、カスタマイズしましょう。

  • 「難易度」のヘッダを 2 回クリックして、簡単から難しい順に並べ替えることができます。面白いことに、これは Easy/Medium/Hard の各カテゴリで、受け入れ率の逆順に並べ替えます。
  • 最初の列の空欄のヘッダをクリックして、未解決の問題を上に持ってくる。
  • 最後に、オプションで非プレミアムユーザーにはロックされている質問をフィルタリングすることができます。一つの方法として、ウェブブラウザのコンソールでこのスクリプトを実行することができます。ただし、ページを更新するたびに実行する必要があります。もちろん、オンラインで見つけた JavaScript をブラウザのコンソールで実行するのは少し怪しいですが、どのように動作するかを理解したい場合にはかなり簡単です。別の方法として、Chrome 用の Leetcode Enhancer のようなブラウザ拡張機能を使用することもできます(オープンソースでもあります)。

これで準備が整いました。もちろん、LeetCode のすべての問題を解決するのが最善の方法です。それをやれば、十分に準備できています。しかし、残念ながら、誰もが無限の時間を持っているわけではないので、少し最適化する必要があります。

  • 簡単なものから難しいものへと進めていく。問題が簡単すぎると感じたら、問題をスキップしていくことができます。
  • すでにエディトリアルが書かれている問題から始める。問題セットの「Solution」列に小さな「ドキュメントページ」アイコンがあるものです。読者に課題として、上記のスクリプトを使って、書かれたエディトリアルがある問題だけをフィルタリングすることができます。
  • 良い評価のある問題から始める。LeetCode はかなり優れたプラットフォームですが、すべての問題が同じように作られているわけではありません。問題を開くと、何人が問題を支持したか反対したかを見ることができます。最初は、支持と反対の比率が 2:1 より悪い問題から遠ざかり、4:1 以上の問題は通常、かなり高品質です。高評価の問題から学ぶ方がずっと簡単です。

いずれ難しい問題にぶつかり、行き詰まることがあります。それは全く問題ありません。実際、問題をあきらめることは(効率的にも)全く問題ありません。おそらく、まだ知らないアルゴリズムやデータ構造が必要であり、アルゴリズムやデータ構造を再発見しようとして髪の毛を抜く必要はありません。ここに、行き詰まったときの解決策がいくつかあります。

  • まず、問題にすでにエディトリアルが書かれている場合は、それを読むことから始めます。これらはかなり高品質で、よく書かれたコードソリューションが含まれていることが多いです。
  • 次に、問題の「Discuss」タブを開いて、いくつかの投稿を読みます。これら

は品質が様々です:中には解決策だけを投稿している人もいれば、詳細にわたって説明している人もいます。ここでの効果は人それぞれですが、行き詰まったときにも役立つリソースです。

  • 最後に、問題自体を Google で検索すると、他の人がソリューションを投稿したり、個人のブログや Github リポジトリで書いていることがよくあります。

LeetCode で問題を解くのに自信がついてきたら、スキルを磨くために次のステップに進みましょう。

  • 特定のアルゴリズムで弱いと感じる場合は、問題セットを「Tag」でフィルタリングすることができます。ただし、これは一般的な練習にはお勧めできません。なぜなら、実際の問題解決スキルとして身につけたいのは、問題を解決するためのアルゴリズムのタイプを特定する能力だからです。たとえば、「Binary Search」でフィルタリングすると、問題の解決策はおそらくバイナリーサーチになることがわかります。
  • 古い問題を見直して、最適な解決策を見つけたかどうか確認してください。LeetCode のオンラインジャッジでは、実際には劣った解決策も受け入れられることがよくあります。O(N)の解決策が存在する場合でも、O(N log N)の解決策を提出したとしても、おそらく合格するでしょう。実行時間/メモリのパーセンタイルは実際には誤解を招くものなので、それについてあまり心配する必要はありません。異なる実行時間がある場合、例えば O(N)と O(N^2)の場合、実行時間の分布は二峰性になります。
  • 週次コンテストは、コミュニティ全体と比較してどのくらいの位置にいるかを確認するのに役立ちます。さらに、時間のプレッシャーがかかり、通常はこれまで見たことのない新しい問題が出題されます。
  • これは数年前には利用できなかった新機能ですが、新しいモックインタビューは実際に時間のプレッシャーを追加するのに非常に役立ちます。残念ながら、以前に解決した問題をフィルタリングする方法はありませんが、これを以前に解決した問題の復習の機会と見ることができます。モックインタビューはまた、弱点を特定するのに役立つことがあります。

LeetCode プレミアムは私自身は使ったことがないのですが、他の人からの情報では、本当に時間がないときにどのような質問が会社から出されるかを知りたい場合には、LeetCode プレミアムがかなり良いとのことです。特定の企業のために勉強することはお勧めしません。なぜなら、目標はアルゴリズム問題解決スキルを身につけることであり、いくつかの既知の問題に対する答えを暗記することではないからです。しかし、本当に時間がない場合には、これが最善の選択肢となるでしょう。(LeetCode プレミアムをお勧めしているのに、LeetCode のスポンサーではないんですよ!それぐらい良いんです。)

最後に、余裕がある場合や親切な友人や図書館から借りることができる場合は、「Cracking the Coding Interview」という本も強くお勧めします。その多くの問題は LeetCode でも利用できます(このリストを参照)、そのため、LeetCode を本と共に補完的なツールとして使うことができます。この本はかなり入門向けと考えられているので、技術面接が初めての方は、LeetCode を本格的に利用する前に、まずこの本を読んでみることをお勧めします。

質問がある場合はコメントを残していただければ幸いです。質問に回答したり、この投稿を更新したりすることができます。