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
1k
Repositoryパターンを維持しながらN+1問題を起こさないようにする方法論について
yamotuki
2
1.4k
プログラマ三大美徳を実現するデプロイフローを目指して
yamotuki
0
940
再コンパイル不要._core_dump_さえ吐ければ_gdb_デバッグできます.pdf
yamotuki
0
460
Other Decks in Technology
See All in Technology
ゆめみのアクセシビリティの現在地と今後
ryokatsuse
3
290
セキュリティ研修 Day1【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
150
開発と事業を繋ぐ!SREのオブザーバビリティ戦略 ~ Developers Summit 2024 Summer ~
leveragestech
0
620
Git 研修 Basic【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
310
DDDにおける認可の扱いとKotlinにおける実装パターン / authorization-for-ddd-and-kotlin-implement-pattern
urmot
4
390
データベース研修 分析向けSQL入門【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
110
サービス開発を前に進めるために 新米リードエンジニアが 取り組んだこと / Steps Taken by a Novice Lead Engineer to Advance Service Development
nologyance
0
180
シフトレフトで挑む セキュリティの生産性向上
sekido
PRO
0
270
さらに高品質・高速化を目指すAI時代のテスト設計支援と、めざす先 / AI Test Lab vol.1
shift_evolve
0
190
成長期に歩みを止めないための創業期の開発文化形成
mayah
6
420
[2024最新版]AWS Control Towerを使ったセキュアなマルチアカウント環境の作り方
hiashisan
0
270
クラウド利用者の「責任」をどう果たす?AWSセキュリティ対策のススメ #AWSSummit
hiashisan
0
270
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
224
21k
It's Worth the Effort
3n
181
27k
Practical Orchestrator
shlominoach
185
10k
The Cost Of JavaScript in 2023
addyosmani
31
4.7k
Designing with Data
zakiwarfel
96
5k
Teambox: Starting and Learning
jrom
130
8.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
360
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.3k
Rebuilding a faster, lazier Slack
samanthasiow
78
8.5k
Code Reviewing Like a Champion
maltzj
517
39k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
44
4.7k
YesSQL, Process and Tooling at Scale
rocio
166
14k
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. なんとなくの速度感覚がつく