83 remove duplicates from sorted list#4
Conversation
|
|
||
| ## step3(10分以内にさっとかける * 3回) | ||
|
|
||
| `curr` はみんな使ってるし省略形でも悪くなさそう |
There was a problem hiding this comment.
私は個人的には current が好きでないです。理由はコメント集にあります。まあ、海外大の授業では使われるらしいのですが。
There was a problem hiding this comment.
これくらいの長さだったら、まあいいとは思うんですが、本当は current という名前は、あんまり情報量がないので、もう少し情報の載ったもののほうがいいかもしれません。
(current: 現在注目しているもの、くらいのつもりですよね。)
https://discord.com/channels/1084280443945353267/1231966485610758196/1236231890038689844
なるほどこれですか。確かに情報量が少ないというのはそうかもしれません。
個人的には順番に見ていったり移動していくやつは current と書きたくなる気持ちがあるんですが、確かに主役なら the node くらいの気持ちで node と書くほうが簡潔で良い場面も多そうです。
There was a problem hiding this comment.
私はcurrentは消去法で使うときはあるなという感覚なのですが、currで省略することはあまりないという感覚でした。(PHP, Ruby, Java, TypeScriptあたりしか触ったことがないです。)
使うならcurrentで省略しないかなという気持ちです。
There was a problem hiding this comment.
ありがとうございます。自分も略語に関しても読み手の負荷が上がるので避けた方がいいなと最近思うようになりました。
curr とかって、教科書とかアルゴリズムの解説みたいなのを観てるとよく出てくるイメージなんですが確かに仕事してて(そんなに広い範囲ではないですが)コード見てるとそんなに見かけないかもです。
|
|
||
| ## step3(10分以内にさっとかける * 3回) | ||
|
|
||
| `curr` はみんな使ってるし省略形でも悪くなさそう |
There was a problem hiding this comment.
私はcurrentは消去法で使うときはあるなという感覚なのですが、currで省略することはあまりないという感覚でした。(PHP, Ruby, Java, TypeScriptあたりしか触ったことがないです。)
使うならcurrentで省略しないかなという気持ちです。
| - 破壊しないでと言われたら、破壊する時と同じように前から見ていって違う数字が出てくるたびに新しいノードを作って繋ぐ、という感じになりそう。たぶん↓みたいな感じ。 | ||
|
|
||
| ```python | ||
| class Solution: | ||
| def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]: | ||
| curr = head | ||
| dummy_head = ListNode() | ||
| non_dup_node = dummy_head | ||
| while curr: | ||
| if curr.next and curr.next.val == curr.val: | ||
| curr = curr.next | ||
| continue | ||
| non_dup_node.next = ListNode(val=curr.val) | ||
| non_dup_node = non_dup_node.next | ||
| return dummy_head.next | ||
| ``` |
| current_node = head | ||
| current_value = head.val |
There was a problem hiding this comment.
私は2重ループで書くstep2, 3の書き方よりもこちらのほうが好みです。
単純にループは少ないほうが認知不可が小さくなりやすいと感じているからです。
There was a problem hiding this comment.
書くとしたらcurrent_nodeとcurrent_valueをどちらも定義するのは冗長なので、引用されていたコメントの近くに投稿されている以下のようなコードを書く気がします。
https://discord.com/channels/1084280443945353267/1195700948786491403/1196388760275910747
There was a problem hiding this comment.
ありがとうございます。こちらの方が処理がわかりやすいというのは私も同感です。 中が while でもかけるんだと思って練習してみたのが後続ステップでしたが実際だとこっちを書きたくなるかもと思ってます。
書くとしたらcurrent_nodeとcurrent_valueをどちらも定義するのは冗長なので
そうですね、val は変数に代入する必要なかったと思います。
| ソートされているので、重複するノードは連続してしか出てこない。なので、次のノードの値が今見てるノードの値と同じなら飛ばす(next を繋ぎかえる)、という発想。 | ||
| 連結リストのいいところは、ポインタを繋ぎかえるだけで挿入・削除ができるところ。 | ||
|
|
||
| ## step2(整形&他の人のコードを読む) |
There was a problem hiding this comment.
ほかは再帰で書くなどもあるようなので、ご興味ありましたらご参照ください。
- https://github.com/ask-1407/leetcode/pull/5/changes/BASE..45f1e1aa9842ed5f433796a3b15831b22c8e4cdc#r1680671776
- https://github.com/nicah4o/arai60/pull/3/changes/BASE..0afa6662b9d5dbf68e081c2f1839b5df96d24edd#r3189902845
- https://github.com/erutako/leetcode/blob/main/arai60/83_removeDuplicatesFromSortedList/first/step3.md
- 拙コードですが、自分も上記コメントなどを見て再帰で書いてみてます。
この問題:https://leetcode.com/problems/remove-duplicates-from-sorted-list/
次の問題:https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/