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.7k
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
950
Repositoryパターンを維持しながらN+1問題を起こさないようにする方法論について
yamotuki
2
1.2k
プログラマ三大美徳を実現するデプロイフローを目指して
yamotuki
0
860
再コンパイル不要._core_dump_さえ吐ければ_gdb_デバッグできます.pdf
yamotuki
0
430
Other Decks in Technology
See All in Technology
アクセシビリティを考慮したUI/CSSフレームワーク・ライブラリ選定
yajihum
2
1k
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
240
エンジニア候補者向け資料2024.04.24.pdf
macloud
0
3.3k
元インフラエンジニアに成る / Human Resources to Human Relations
bobtani
4
930
競技としてのKaggle、役に立つKaggle
yu4u
3
1.9k
反実仮想機械学習とは何か
usaito
PRO
11
4.7k
一生覚えておきたい「システム開発=コミュニケーション」〜初めての実務案件振り返りLT〜
maimyyym
1
160
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
260
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
320
オーナーシップを持つ領域を明確にする
konifar
13
3.2k
GrafanaMeetup_AmazonManagedGrafanaのアクセス制御機能とマルチテナント環境下でのアクセス制御について
daitak
0
250
プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping
ohbarye
5
390
Featured
See All Featured
Debugging Ruby Performance
tmm1
70
11k
10 Git Anti Patterns You Should be Aware of
lemiorhan
648
58k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
Design by the Numbers
sachag
274
18k
Building Effective Engineering Teams - LeadDev
addyosmani
28
1.8k
It's Worth the Effort
3n
180
27k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
40
4.4k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Rails Girls Zürich Keynote
gr2m
91
13k
Clear Off the Table
cherdarchuk
84
310k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
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. なんとなくの速度感覚がつく