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
LeetCode 83 - Remove duplicates from sorted list
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kohei
March 21, 2020
Programming
2
410
LeetCode 83 - Remove duplicates from sorted list
Kohei
March 21, 2020
Tweet
Share
More Decks by Kohei
See All by Kohei
LeetCodeガイド
1kohei1
2
940
UCF Fall 2017 Senior Design final presentation
1kohei1
0
62
アメリカでの一年目
1kohei1
0
90
Other Decks in Programming
See All in Programming
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
490
2026/02/04 AIキャラクター人格の実装論 口 調の模倣から、コンテキスト制御による 『思想』と『行動』の創発へ
sr2mg4
0
720
atmaCup #23でAIコーディングを活用した話
ml_bear
4
750
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
740
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
340
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
3
1.1k
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
7.8k
encoding/json/v2のUnmarshalはこう変わった:内部実装で見る設計改善
kurakura0916
0
350
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
320
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
330
Docコメントで始める簡単ガードレール
keisukeikeda
1
100
ご飯食べながらエージェントが開発できる。そう、Agentic Engineeringならね。
yokomachi
1
290
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Claude Code のすすめ
schroneko
67
220k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
84
Making Projects Easy
brettharned
120
6.6k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Skip the Path - Find Your Career Trail
mkilby
1
72
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
140
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
210
Odyssey Design
rkendrick25
PRO
2
540
It's Worth the Effort
3n
188
29k
Ethics towards AI in product and experience design
skipperchong
2
220
Transcript
Remove duplicates from sorted list LinkedListから重複した要素を削除する
内容 • 例を使って問題の確認 • 考えられるコーナーケース • 面接官に確認するべきこと • 解法 •
解法コード (Java) • LeetCodeの解法を解説
例を使って問題の確認 重複が含まれる、すでにソートされた LinkedListが渡されます。
例を使って問題の確認 重複が含まれる、すでにソートされた LinkedListが渡されます。 渡されたLinkedListから重複した値を持 つノードを削除したLinkedListを返しま す。 この例の場合、1が重複しているのでその 余分なノードを削除します。
考えられるコーナーケース ノードが1つの場合
考えられるコーナーケース ノードが1つの場合 全て同じ値の場合
考えられるコーナーケース ノードが1つの場合 全て同じ値の場合 ループがある場合 (ソートされ てるとは言えないので、わたさ れないはずです)
考えられるコーナーケース ノードが1つの場合 全て同じ値の場合 ループがある場合 (ソートされ てるとは言えないので、わたさ れないはずです) nullの場合
面接官に確認するべきこと • 与えられるLinkedListにループは含まれるか • 与えられたLinkedListを変更してもいいのか、それとも新しいLinkedListを返すべき か • LinkedListの値を比べる際、==で比べてもいいのか、それとも別の方法で重複を確 認するべきか 面接では意図的に条件をあやふやにしていることが多いです。曖昧な問題にどうアプ
ローチするかを見ています。前提条件や求められる出力を確認して、その力があること を示しましょう。
その1: すべての要素を保存し、ソートして新しいLinkedListを作る => 計算量: O(N logN), 空間計算量: O(N) その2: ソート済み・重複なしの要素を保存し、新しいLinkedListを作る
=> 計算量: O(N), 空間計算量: O(N) その3: 与えられたLinkedListをそのまま変更していく => 計算量: O(N), 空間計算量: O(1) 解法
その1: すべての要素を保存し、ソートして新しいLinkedListを作る => 計算量: O(N logN), 空間計算量: O(N) その2: ソート済み・重複なしの要素を保存し、新しいLinkedListを作る
=> 計算量: O(N), 空間計算量: O(N) その3: 与えられたLinkedListをそのまま変更していく => 計算量: O(N), 空間計算量: O(1) 計算量、空間計算量で優れているその3を実装します 解法
与えられたLinkedListをそのまま変更していく => LinkedListを順番に見ていき、今までみた最大値を持つノードをキープします。最大 ノードと違う値がきたら、それが次のノードになるようにnextの値をアップデートします。 下のLinkedListを使います。 解法
今まで見たなかでの最大値ノードをmax, 今見ているノードをcurrとします。 最初はどちらも1番目のノードです。 解法
maxはそのままで、currが次のノードへ移動します。maxとcurrの値が同じなので何も起 きません。 解法
currが次のノードへ移動します。 解法
maxとcurrの値が違うのでmaxのポインタがアップデートされます。これで重複していた2 番目の1が、LinkedListから消えました。 2番目の1のポインタは変わってませんが、LinkedListの中に含まれないので問題ありま せん。 解法
最大値が2になったので、maxをアップデートします。 解法
currが次のノードへ移動します。 解法
maxとcurrの値が違うのでmaxのポインタがアップデートされます。ただ、この例ではアッ プデートされても変化がありません。 解法
最大値が3になったので、maxをアップデートします。 解法
currが次のノードへ移動します。nullとなり、LinkedListにある全ての要素を見終えまし た。 解法
最後にmax.nextをnullにします。なぜなら、maxが最後のノードになるからです。この例 では変化がありませんでした。 解法
最後にmax.nextをnullにします。なぜなら、maxが最後のノードになるからです。この例 では変化がありませんでした。 このステップが必要なのはmaxと同じ値のノードが続き、currが終わったときにmax.next がアップデートされないからです。下のLinkedListがそのケースです。 解法
解法 プログラムが終了すると、重複された要素がLinkedListから消えてるので、無事要件を 満たしました。
解法コード これをコードにすると右のようなコードになります。 https://harigami.jp/cmp_rs?hsh=c22f22fe-c8a6-44d5-802f-5baeaf666697 次にLeetCodeの解法についてです。 よりきれいな実装で問題を解いてます。
LeetCodeの解法を解説 https://leetcode.com/problems/remove-duplicates-from-sorted-list/solution/ currentとcurrent.nextが同じ値の場合、current.nextをスキップすることで、currentと同 じ値のノードをスキップし続ける実装になっています。 nullの場合分けもなく、whileループが終わったら全ての重複が取り除かれているため、 非常にきれいな実装です。
Thank you 作者: @koheiarai94