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
Privacy Sandbox on Android / DroidKaigi 2024
7pairs
1
160
サーバレスでモバイルアプリ開発! NTTコム「ビジネスdアプリ」のアーキテクチャ / The architecture of business d app
nttcom
12
200
App Router を実プロダクトで採用して見えてきた勘所をちょっとだけ紹介
marokanatani
0
760
CRTO/CRTL/OSEPの比較・勉強法とAV/EDRの検知実験
chayakonanaika
1
1k
Evolving DevOps Teams and Flexible Organizational Culture
kakehashi
1
250
スーパーマリオRPGのリメイク版の変更点からみるUX
nishiharatsubasa
1
320
AI でアップデートする既存テクノロジーと、クラウドエンジニアの生きる道
soracom
PRO
2
380
ロボットアームを遠隔制御の話 & LLMをつかったIoTの話もしたい
soracom
PRO
1
250
AWS SAW を広めたい @四国クラウドお遍路
kazzpapa3
0
210
Tricentisにおけるテスト自動化へのAI活用ご紹介/20240910Shunsuke Katakura
shift_evolve
0
170
Creative UIs with Compose: DroidKaigi 2024
chrishorner
1
160
React Aria で実現する次世代のアクセシビリティ
ryo_manba
4
1k
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
A better future with KSS
kneath
235
17k
The Brand Is Dead. Long Live the Brand.
mthomps
53
37k
Docker and Python
trallard
39
3k
Git: the NoSQL Database
bkeepers
PRO
425
64k
VelocityConf: Rendering Performance Case Studies
addyosmani
322
23k
How to Ace a Technical Interview
jacobian
275
23k
Agile that works and the tools we love
rasmusluckow
327
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
88
16k
A Tale of Four Properties
chriscoyier
155
22k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
34
1.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.6k
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. なんとなくの速度感覚がつく