(ブログ記事からの転載)
唐突ですが、私のマイブームを紹介します。
LeetCodeという、コーディングの問題集的サイトです。
最近はここで毎日問題を解いているんですが、せっかくなら何かしらアウトプットした方がペースメーカーにもなると思い、ブログ記事にします。
LeetCodeでは、エンジニアの面接で行われるCoding Interviewで実際に出題された問題が掲載されているそうです。
実際にGoogle等のCoding Interviewを受けた人の話では、全く同じ問題は出ないが、LeetCodeをやっておけば解ける問題が出た、とのことでした。
難易度のレベルがEasy/Medium/Hardとあり、C/Java/Python/Rubyなど多くの言語に対応しています。
各問題にDiscussionページが設けられ、他のユーザーの解法を見て勉強できます。
一部問題には公式のSolutionページもあります(無料会員と有料会員で見られる範囲が異なります)。
ビジネスパーソンの方々、なんだエンジニアの話か、と思うなかれ。
特に小中高校時代に算数が得意だった方にとっては、なかなか面白いサイトだと思います。
これを機会にコーディングデビューしてみては?と思うくらい。
例えば以下の問題。
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
階段を上っていて、1段ずつないしは1段飛ばしでしか上れないとしたとき、n段目まで上る方法はいくつある?という問題です。
こんな問題、どこかで聞いたことありませんか?
n段目まで上るには、n-1段目から1段上るか、n-2段目から1段飛ばしで上るかのどちらかになります。
つまり、n段目までの上り方の数を$f(n)$とすると、$f(n)=f(n-1)+f(n-2)$になるわけです。
「フィボナッチ数列」という言葉を聞いたことはありませんか?「前の2つの数を加えると次の数になる」という数列で、まさにそれにあたるわけです。
これをコードで書くと、以下のようになります。
class Solution:
def climbStairs(self, n: int) -> int:
if n == 1:
return 1
elif n == 2:
return 2
else:
i = 3; a = 1; b = 2
while i < n:
a, b = b, a+b
i += 1
return a+b
もっと簡単に書くと以下の通り。
class Solution:
def climbStairs(self, n: int) -> int:
a = b = 1
for _ in range(n):
a, b = b, a + b
return a
エンジニア目線では、LeetCodeは処理時間とメモリ使用量について、計算量オーダー(あるアルゴリズムを使った演算の性能を表す指標)も示してくれるので助かります。
ただsubmitごとに値が大きく変わっていて(特に処理時間)、LeetCode側のサーバー側がどれだけ混んでるかに依っていそうなので、あくまで参考値ですが。
最後に、私がLeetCodeを知るきっかけになったTweetを紹介します。
今年の4月に行われたKaggle daysの発表でKaggleは機械学習エンジニアのジョブにつくのに役立つか?という問題に関して、ジョブがほしいならKaggleではなくLeetCodeやれ、その後でKaggleやれとのこと pic.twitter.com/KnudQRzsFu
— MIC (@ml_datascience) 2019年6月3日
とある理由でKaggleを注視しているんですが、なかなか敷居が高いですし、世の中の大半を占めるであろう、機械学習活用度 Low ~ Middle 層では、ここまでのスキルが必要か?と思っていました。
そう思っていたところでこのTweetを見て、我が意を得たり、と思ったわけです。
さて、このLeetCodeについてですが、今後は不定期ながらもこのBlogやQiita上で面白いと思った問題を取り上げていこうと思います。
~以下余談~
LeetCodeのもとになっているCoding Interviewですが、、日本では全くと言っていいほど行われていないそうですね。
今をときめく○ルカリのエンジニア面接に臨んだ米国大学卒の子(LeetCodeヘビーユーザー)が、「あなたの志望動機は〜」「強みは〜」など通り一遍の質問だけ聞かれて落とされ、納得いかない・・・と言ってました。
単純に評価できる人がいないということなんでしょうが、日本のITリテラシの低さの一端がまた見えてしまった気がします。