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
2.2k
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.2k
Repositoryパターンを維持しながらN+1問題を起こさないようにする方法論について
yamotuki
2
1.6k
プログラマ三大美徳を実現するデプロイフローを目指して
yamotuki
0
1.1k
再コンパイル不要._core_dump_さえ吐ければ_gdb_デバッグできます.pdf
yamotuki
0
520
Other Decks in Technology
See All in Technology
事業を差別化する技術を生み出す技術
pyama86
2
500
x86-64 Assembly Essentials
latte72
1
270
OPENLOGI Company Profile for engineer
hr01
1
20k
1行のコードから社会課題の解決へ: EMの探究、事業・技術・組織を紡ぐ実践知 / EM Conf 2025
9ma3r
12
4.8k
データベースの負荷を紐解く/untangle-the-database-load
emiki
2
550
AIエージェント時代のエンジニアになろう #jawsug #jawsdays2025 / 20250301 Agentic AI Engineering
yoshidashingo
9
4.1k
サイト信頼性エンジニアリングとAmazon Web Services / SRE and AWS
ymotongpoo
7
1.8k
LINEギフトにおけるバックエンド開発
lycorptech_jp
PRO
0
420
ExaDB-XSで利用されているExadata Exascaleについて
oracle4engineer
PRO
3
300
入門 PEAK Threat Hunting @SECCON
odorusatoshi
0
180
What's new in Go 1.24?
ciarana
1
120
Apache Iceberg Case Study in LY Corporation
lycorptech_jp
PRO
0
370
Featured
See All Featured
Being A Developer After 40
akosma
89
590k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
115
51k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Building Applications with DynamoDB
mza
93
6.2k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Why Our Code Smells
bkeepers
PRO
336
57k
Practical Orchestrator
shlominoach
186
10k
Building an army of robots
kneath
303
45k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Cult of Friendly URLs
andyhume
78
6.2k
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. なんとなくの速度感覚がつく