Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPでleetCodeのeasyレベル100問ノック

7e9e111546b163cc05d517eec128c04f?s=47 Tomoya-Suzuki
February 11, 2020

 PHPでleetCodeのeasyレベル100問ノック

PHPerKaigi2020のLT5分枠でお話させていただいたものです。

7e9e111546b163cc05d517eec128c04f?s=128

Tomoya-Suzuki

February 11, 2020
Tweet

Transcript

  1. PHPでleetCodeのeasyレ ベル100問ノック @yamotuki 鈴木智也

  2. 自己紹介 • 4年ちょっとインフラ 転職⬇ • 「M&Aクラウド」という八丁堀のベンチャーでエンジニア • 現職: バックエンドエンジニア 1年半。PHP書くぞ!

    • 転職直後は・・・・
  3. なんも分からん! • PHPわからん! ロジック書くのめっちゃ苦労する! • そんな時期・・・ ◦ GAFAではコーディング面接するらしい ◦ 世界で戦うにはアルゴリズムは絶対に必要な素養っぽい •

    という噂
  4. じゃあ勉強するぞ! • leetCode というコーディング面接の過去問を集めたサイト ◦ https://leetcode.com/

  5. None
  6. PHPでできるぞ • テンション上がってきた! • まずは100問やるぞ!

  7. やってみた 8割くらいPHPで実装

  8. 何が役に立ったか?(今日のアジェンダ) 4点話します 1. 読み書きが楽に 2. 他言語も触れる。Golang, JS, Python など 3.

    テストファーストが身に付く 4. なんとなくの速度感覚がつく
  9. 1. 読み書きが楽に • 当初の目的達成 • ロジックを書くのがちょっと楽に • 可読性低いコードも少し楽に読めるように

  10. 2. 他の言語も触れる • PHPと比較して他の言語も実装 • Golang, JavaScript, Python とかちょっとだけ触った

  11. 3. テストファーストが多少身に付く • 思わぬ恩恵 • LeetCodeのコードの試し実行が遅い • PHPStormでテストファースト • テスト通ってロジックに納得したら提出

  12. 4. なんとなくの実行速度感覚がつく • なんとなくレベル • 経験的に、重そうな関数がわかってくる • 同じ処理するならこっちの方法が軽いぞ、みたいなパターンも

  13. 【小ネタ】 in_array() 遅い話  [‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘apple’]

    から ‘apple’ があるか判定 in_array() 使うのが楽そう?
  14. in_array() はやや遅い • 言語の内部ではforで1要素ずつみて一致したらtrueなので重い • 以下は速度測定コード n=10000でループ10000回 0.2秒

  15. array_flip() しておいて isset() する方が早い • 同じ配列で0.003秒で終わる。66倍早い!(当然毎回flipしたら遅いけど)

  16. なんでisset()でチェック早い? • array_flip() すると配列は以下のようになる • [‘banana’ => 9999, ‘apple’=> 10000]

    • 検索対象がハッシュマップのキーになるので、O(1)で判定可能 •
  17. 終わりに • パズルゲームだと思うと楽しい • 突然難しいのを始めると辛いので、簡単なのから着実に まとめ(再掲) 1. 読み書きが楽に 2. 他言語も触れる。Golang,

    JS, Python など 3. テストファーストが身に付く 4. なんとなくの速度感覚がつく