こんにちは
今回の学びは
・ソートされた配列と二分木はよく似てるよ。
・できれば二分木探索を配列で実装していて 🙂
問題は。。。
(時間配分は5分問題理解 10分検討 10分実装 20分振り返り の一文45分構成)
まずは入出力をしっかりおさえましょう。
実装前後でこれは毎回書きましょう。timespace analysis (時間とスペースの分析)は O(N*2)
実際の実装はこちら
class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: curr = head i = 0 while curr: curr = curr.next i += 1 sz = i target = sz - (n) print(sz, target) if target == 0 and sz == 1: return None i = 0 if target == 0 and sz >= 2: head = head.next return head curr = head while curr: if i == target-1: curr.next = curr.next.next if curr.next else None curr = curr.next else: curr = curr.next i += 1 return head
実装後です。timespace analysis (時間とスペースの分析)は O(N*2)
1116am 途中別のことをしたのでタイムロス、しかし場合分けが多い問題は実装が疲れるな。 なんとかならんかねぇ。 one passでもできるらしいだけど、それは、配列にnode記憶していって、やる。かな。
配列のほうが、実装しやすいかな。以外に場合分けが大変だったよ。。。
one passソリューションをながめましょう。
https://leetcode.com/problems/remove-nth-node-from-end-of-list/discuss/392049/Python-one-pass-solution-easy-to-understand-faster-than-96 。およ、パット見てわからん。別の機会にもう一度、ながめよう。
今日はしつれいします。
まとめ
以上です