PHPerKaigi2020のLT5分枠でお話させていただいたものです。
PHPでleetCodeのeasyレベル100問ノック@yamotuki鈴木智也
View Slide
自己紹介● 4年ちょっとインフラ転職⬇● 「M&Aクラウド」という八丁堀のベンチャーでエンジニア● 現職: バックエンドエンジニア 1年半。PHP書くぞ!● 転職直後は・・・・
なんも分からん!● PHPわからん! ロジック書くのめっちゃ苦労する!● そんな時期・・・○ GAFAではコーディング面接するらしい○ 世界で戦うにはアルゴリズムは絶対に必要な素養っぽい● という噂
じゃあ勉強するぞ!● leetCode というコーディング面接の過去問を集めたサイト○ https://leetcode.com/
PHPでできるぞ● テンション上がってきた!● まずは100問やるぞ!
やってみた8割くらいPHPで実装
何が役に立ったか?(今日のアジェンダ)4点話します1. 読み書きが楽に2. 他言語も触れる。Golang, JS, Python など3. テストファーストが身に付く4. なんとなくの速度感覚がつく
1. 読み書きが楽に● 当初の目的達成● ロジックを書くのがちょっと楽に● 可読性低いコードも少し楽に読めるように
2. 他の言語も触れる● PHPと比較して他の言語も実装● Golang, JavaScript, Python とかちょっとだけ触った
3. テストファーストが多少身に付く● 思わぬ恩恵● LeetCodeのコードの試し実行が遅い● PHPStormでテストファースト● テスト通ってロジックに納得したら提出
4. なんとなくの実行速度感覚がつく● なんとなくレベル● 経験的に、重そうな関数がわかってくる● 同じ処理するならこっちの方法が軽いぞ、みたいなパターンも
【小ネタ】 in_array() 遅い話 [‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘apple’]から ‘apple’ があるか判定in_array() 使うのが楽そう?
in_array() はやや遅い● 言語の内部ではforで1要素ずつみて一致したらtrueなので重い● 以下は速度測定コードn=10000でループ10000回 0.2秒
array_flip() しておいて isset() する方が早い● 同じ配列で0.003秒で終わる。66倍早い!(当然毎回flipしたら遅いけど)
なんでisset()でチェック早い?● array_flip() すると配列は以下のようになる● [‘banana’ => 9999, ‘apple’=> 10000]● 検索対象がハッシュマップのキーになるので、O(1)で判定可能●
終わりに● パズルゲームだと思うと楽しい● 突然難しいのを始めると辛いので、簡単なのから着実にまとめ(再掲)1. 読み書きが楽に2. 他言語も触れる。Golang, JS, Python など3. テストファーストが身に付く4. なんとなくの速度感覚がつく