Skip to content

108._Convert_Sorted_Array_to_Binary_Search_Tree#3

Open
arahi10 wants to merge 1 commit intomainfrom
108._Convert_Sorted_Array_to_Binary_Search_Tree
Open

108._Convert_Sorted_Array_to_Binary_Search_Tree#3
arahi10 wants to merge 1 commit intomainfrom
108._Convert_Sorted_Array_to_Binary_Search_Tree

Conversation

@arahi10
Copy link
Copy Markdown
Owner

@arahi10 arahi10 commented Feb 27, 2026

問題

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ファイルです.

begin = 0
end = len(nums)
root = TreeNode(val=nums[( begin + end ) // 2])
dq = deque([(root, begin, end)])
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

変数名に deque を表す略語 dq と付けても、あまり情報がないように感じました。中にどのような要素が含まれるかを表す端的な英単語・英語句を付けることをお勧めいたします。

return None
begin = 0
end = len(nums)
root = TreeNode(val=nums[( begin + end ) // 2])
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

() のすぐ内側にスペースを空けるのは、あまり見ないように思いました。

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

英文書くときのクセで空白連発してしまうのと,日常のコーディングではフォーマッタにまかせている部分なので,やりがちです...
自分で見直したときにスルーしてしまうのは,やはりコードリーディングが足りないシグナルなんでしょうか?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

まあ、別に構わないとは思いますが、ルールが決まっている環境でレビューを受けて1-2週間くらい活動すると固定されます。


### 4.4. 改善するときに考えたこと

- 変数のシャドーイングをなくす(`begin`, `mid`, `end` は while ループに取っておく.)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これはシャドーイングではないように思いました。
シャドーイングとは、より狭いスコープ内の変数を定義することで、外側の変数の識別子を隠すことだと理解しています。
Pythonのwhileループはスコープを作らないので、単なる再代入に見えます。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

それはそれとして、Pythonは比較的再代入にも寛容な気がします(代入の度にデータ型が変わる、みたいなのは止めたほうがいいでしょうが…)。本PRのコードも、利用範囲や流れの上でも、割と追いやすく問題とは思いませんでした。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

シャドーイングに違和感を感じたのはナイスキャッチです。

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コメントありがとうございます!
"シャドーイング"については,ご指摘の通り再代入が適切ですね.ありがとうございます.
再代入の是非についてですが,意図としては,再代入絶対ゆるさないというわけではなく,名前を分けておけると丁寧だよね,くらいものでした.
ご指摘の通り,今回の再代入の例が許容される範囲内であると僕も思いますし,常識の範囲内に収まるなら正直好みの問題だと思います.

- そのままにして,while ループで `sub_` の prefix をつける("部分木の"の意)→変数名が長い割には意味的にはわかりやすくならないしなぁ.
- そのままにして,木全体も部分木の一種としてみなせるのでシャドーイング自体をも許す→今回の場合 `root` は返り値に使うためにシャドーイングしてはならないのがちょっと嫌な気持ちになる.
- ハードコードに変更する(0, `len(nums)` )→まぁその数行下に意味がわかる変数名 `begin`, `end` がいるから許容?
- うーん,コーディングテスト本番にこんなところまで考えられない気がする.動くコード書いたあと「業務で書くとしたらどんなこと思う?」ときかれたら上の話をするくらい?
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

私はビッグテックでの面接官経験はありませんが、コーディングテストは業務を想定したものだと思います(業務で、手を動かす時間がない面接官が、受験者に対して、とある機能の実装をお願いしようとする想定)。コーディングテスト中に気を使えないところは業務でも気を使えないのだと思われるのではないでしょうか。したがって

「業務で書くとしたらどんなこと思う?」

というのは聞かれる可能性が低いと予想します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants