Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPでleetCodeのeasyレベル100問ノック
Search
Tomoya-Suzuki
February 11, 2020
Technology
0
1.9k
PHPでleetCodeのeasyレベル100問ノック
PHPerKaigi2020のLT5分枠でお話させていただいたものです。
Tomoya-Suzuki
February 11, 2020
Tweet
Share
More Decks by Tomoya-Suzuki
See All by Tomoya-Suzuki
安易に前職同僚飲み会に行ったら 売り上げのほぼないスタートアップに入社してた話
yamotuki
0
1.1k
Repositoryパターンを維持しながらN+1問題を起こさないようにする方法論について
yamotuki
2
1.4k
プログラマ三大美徳を実現するデプロイフローを目指して
yamotuki
0
990
再コンパイル不要._core_dump_さえ吐ければ_gdb_デバッグできます.pdf
yamotuki
0
480
Other Decks in Technology
See All in Technology
「家族アルバム みてね」における運用管理・ オブザーバビリティの全貌 / Overview of Operation Management and Observability in FamilyAlbum
isaoshimizu
4
140
20分で分かるIAM全機能 (拡大版) / 20240903-jawsug-yokohama-iam
opelab
3
140
LLVM/ASMを使った有限体の高速実装
herumi
0
110
AWS SAW を広めたい @四国クラウドお遍路
kazzpapa3
0
220
ロリポップ! for Gamersを支えるインフラ/lolipop for gamers infrastructure
takumakume
0
120
より快適なエラーログ監視を目指して
leveragestech
3
1.1k
エンジニア向け会社紹介資料
caddi_eng
15
250k
四国クラウドお遍路 2024 in 高知 エンディング
yukataoka
0
180
JEP 480: Structured Concurrency
aya_ebata
0
120
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
0
13k
Functional TypeScript
naoya
10
4.5k
Monitor GraalVM Native Apps with OpenTelemetry
logico_jp
0
120
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1365
200k
A Philosophy of Restraint
colly
202
16k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
5 minutes of I Can Smell Your CMS
philhawksworth
201
19k
Writing Fast Ruby
sferik
623
60k
Making Projects Easy
brettharned
113
5.8k
Testing 201, or: Great Expectations
jmmastey
36
7k
Into the Great Unknown - MozCon
thekraken
28
1.4k
Designing with Data
zakiwarfel
98
5k
Faster Mobile Websites
deanohume
304
30k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
401
65k
Transcript
PHPでleetCodeのeasyレ ベル100問ノック @yamotuki 鈴木智也
自己紹介 • 4年ちょっとインフラ 転職⬇ • 「M&Aクラウド」という八丁堀のベンチャーでエンジニア • 現職: バックエンドエンジニア 1年半。PHP書くぞ!
• 転職直後は・・・・
なんも分からん! • PHPわからん! ロジック書くのめっちゃ苦労する! • そんな時期・・・ ◦ GAFAではコーディング面接するらしい ◦ 世界で戦うにはアルゴリズムは絶対に必要な素養っぽい •
という噂
じゃあ勉強するぞ! • leetCode というコーディング面接の過去問を集めたサイト ◦ https://leetcode.com/
None
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. なんとなくの速度感覚がつく