🍣
October LeetCoding Challenge 2020 の挑戦記録
2020 年 10 月の LeetCoding Challenge 挑戦記録のまとめです。
結果
- 正解にたどり着けた問題数: 31/31 (100%)
- Runtime beats の傾向:
Runtime beats | 回数 | 割合 |
---|---|---|
99% 以上 | 20 | 64.52% |
95% 以上 | 23 | 74.19% |
90% 以上 | 24 | 77.42% |
記事一覧
振り返り
- 今月はいずれの問題も discuss や solution を一度も見ずに自力で解答にたどり着けた 👍
- とは言えど、最適解にたどり着けないこともまだしばしば… 👎
- 今月から runtime beats を記録するようにしてみたけど、まずまずといったところ
- 50% に満たないことが 4 回もあって不甲斐ない… 👎
- Runtime beats 90% 以上を 9 割以上、99% 以上を 7 割以上にするのを目標にしたい
- ちょっとした記述の違いで 1ms 増えたり減ったりして、JVM の気持ちを理解するにはまだ修行が必要そう
- まったく不要な if ブロックを削ったら逆にパフォーマンスが劣化したりするのはよくあること (理解に苦しむ)
- メソッドのインライン化は結構パフォーマンスに響く
-
BitSet
使わずにboolean[]
を使うほうが速かったりする (メモリ効率は悪くなるけどね…)
所感
前職の有給消化中&転職活動中だった今年の6月ぐらいから LeetCode に日常的に取り組むようにしているのですが、LeetCode をやっていて業務に直接的に役立ったことがあったかというと「ほぼ皆無かなー?」というのが 現時点の 僕の答えです。
結局のところ、GAFA などと呼ばれる大手 IT 企業のコーディングインタビュー対策がこの手のサービスが存在しまたユーザが利用する主目的であって、LeetCode を 400 問解いたところでソフトウェアエンジニアとしての仕事ができるかといったらそうではないことに (採用担当者的な立ち位置で面接に関わる場合は) 注意が必要だと思います。特に業務で求められるであろう、コードのリーダビリティやメンテナビリティは問題数をこなしただけではまったく身に付く気がしないですからね…
でもだからといって、LeetCode をやるのはまったく無意味かといったら「そうではない」と僕は考えています。与えられた問題をプログラミング可能な問題として解釈し、時間・空間計算量的に適切なデータ構造とアルゴリズムを選択しつつ、言語や VM 特有のパフォーマンス的な観点に気を払いながらコードに落とし込んでいく という プログラミングの原始的なプロセス は実は日々の業務ではそれほど多く経験できるわけではなかったりするので、それを補う目的で日々 LeetCode の問題に取り組むのはある意味でソフトウェアエンジニアとしての「素振り」に相当するのかな… と感じています。
Discussion