Conversation
| begin = 0 | ||
| end = len(nums) | ||
| root = TreeNode(val=nums[( begin + end ) // 2]) | ||
| dq = deque([(root, begin, end)]) |
There was a problem hiding this comment.
変数名に deque を表す略語 dq と付けても、あまり情報がないように感じました。中にどのような要素が含まれるかを表す端的な英単語・英語句を付けることをお勧めいたします。
| return None | ||
| begin = 0 | ||
| end = len(nums) | ||
| root = TreeNode(val=nums[( begin + end ) // 2]) |
There was a problem hiding this comment.
英文書くときのクセで空白連発してしまうのと,日常のコーディングではフォーマッタにまかせている部分なので,やりがちです...
自分で見直したときにスルーしてしまうのは,やはりコードリーディングが足りないシグナルなんでしょうか?
There was a problem hiding this comment.
まあ、別に構わないとは思いますが、ルールが決まっている環境でレビューを受けて1-2週間くらい活動すると固定されます。
|
|
||
| ### 4.4. 改善するときに考えたこと | ||
|
|
||
| - 変数のシャドーイングをなくす(`begin`, `mid`, `end` は while ループに取っておく.) |
There was a problem hiding this comment.
これはシャドーイングではないように思いました。
シャドーイングとは、より狭いスコープ内の変数を定義することで、外側の変数の識別子を隠すことだと理解しています。
Pythonのwhileループはスコープを作らないので、単なる再代入に見えます。
There was a problem hiding this comment.
それはそれとして、Pythonは比較的再代入にも寛容な気がします(代入の度にデータ型が変わる、みたいなのは止めたほうがいいでしょうが…)。本PRのコードも、利用範囲や流れの上でも、割と追いやすく問題とは思いませんでした。
There was a problem hiding this comment.
コメントありがとうございます!
"シャドーイング"については,ご指摘の通り再代入が適切ですね.ありがとうございます.
再代入の是非についてですが,意図としては,再代入絶対ゆるさないというわけではなく,名前を分けておけると丁寧だよね,くらいものでした.
ご指摘の通り,今回の再代入の例が許容される範囲内であると僕も思いますし,常識の範囲内に収まるなら正直好みの問題だと思います.
| - そのままにして,while ループで `sub_` の prefix をつける("部分木の"の意)→変数名が長い割には意味的にはわかりやすくならないしなぁ. | ||
| - そのままにして,木全体も部分木の一種としてみなせるのでシャドーイング自体をも許す→今回の場合 `root` は返り値に使うためにシャドーイングしてはならないのがちょっと嫌な気持ちになる. | ||
| - ハードコードに変更する(0, `len(nums)` )→まぁその数行下に意味がわかる変数名 `begin`, `end` がいるから許容? | ||
| - うーん,コーディングテスト本番にこんなところまで考えられない気がする.動くコード書いたあと「業務で書くとしたらどんなこと思う?」ときかれたら上の話をするくらい? |
There was a problem hiding this comment.
私はビッグテックでの面接官経験はありませんが、コーディングテストは業務を想定したものだと思います(業務で、手を動かす時間がない面接官が、受験者に対して、とある機能の実装をお願いしようとする想定)。コーディングテスト中に気を使えないところは業務でも気を使えないのだと思われるのではないでしょうか。したがって
「業務で書くとしたらどんなこと思う?」
というのは聞かれる可能性が低いと予想します。
問題
https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/
成果物所在
108._Convert_Sorted_Array_to_Binary_Search_Tree/memo.mdがステップ1~3までをまとめたmdファイルです.