Skip to content

121. Best Time to Buy and Sell Stock#20

Open
hiro111208 wants to merge 1 commit into
mainfrom
121-best-time-to-buy-and-sell-stock
Open

121. Best Time to Buy and Sell Stock#20
hiro111208 wants to merge 1 commit into
mainfrom
121-best-time-to-buy-and-sell-stock

Conversation

@hiro111208
Copy link
Copy Markdown
Owner


for i, price in enumerate(prices):
if price < prices[buy_day]:
buy_day = i
Copy link
Copy Markdown

@arahi10 arahi10 Apr 29, 2026

Choose a reason for hiding this comment

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

このままでもほとんど問題ないと思いますが ,あえて挙げるなら買う"日" buy_day に"インデックス" i を代入するのがちょっとだけ気になりました.
buy_index などにすると買う日"のインデックス" になって両者が揃うと思います.

(追記)
今後 datetime.date 型の変数を使い始めそうなクラスのメソッドなら個人的に気になるんですが,今回の例なら気にしなくても良いと思います.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

私も...dayという変数にインデックスを入れているのは少し分かりづらい気がしました。
インデックスかビジネスロジックで必要な値かがわかるようにしたいです。
そういう意味で最初のbuy_day=0はループが始まる前に初期化しているので、値の初期値なのかインデックスの始まりなのかがこの時点ではわからないところに少し負荷があるように感じます。
インデックスであることが分かる名前であればこの後ループが出てくることが想像できて読みやすいです。

class Solution:
def maxProfit(self, prices: List[int]) -> int:
max_profit = 0
buying_price = prices[0]
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

問題の制約上そのような入力は Leet Code からは与えられませんが,開発現場でこのメソッドを実装するなら, prices として空のlistが入力されてもエラーが出ないように実装したいなと思いました.

def maxProfit(self, prices: List[int]) -> int:
    if not prices:
        return 0
    max_profit = 0
    buying_price = prices[0]
    # (以下同じ)

# Step 1

- 変数を以下の通りにする
- stockを買う日: `buy_day`
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

個人的には最安値で買うという意味を持たせたいなと思いました。
pricesのなかのminを保持したいという意図が伝わりやすい気がしています。


for i, price in enumerate(prices):
if price < prices[buy_day]:
buy_day = i
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

私も...dayという変数にインデックスを入れているのは少し分かりづらい気がしました。
インデックスかビジネスロジックで必要な値かがわかるようにしたいです。
そういう意味で最初のbuy_day=0はループが始まる前に初期化しているので、値の初期値なのかインデックスの始まりなのかがこの時点ではわからないところに少し負荷があるように感じます。
インデックスであることが分かる名前であればこの後ループが出てくることが想像できて読みやすいです。

for i, price in enumerate(prices):
if price < prices[buy_day]:
buy_day = i
else:
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

step2,3でminを使った実装に置き換えられていて良いと思いました。
if-elseだと分岐をifの分岐条件を頭に入れたままelseが排他的条件の前提で読む必要があって少し認知不可が高い気がしています。
また、レビューでは境界値を考えたときに等価の場合はelse側に寄せるでよいのかなど余計なことを考える必要が出てくる気がするので、minのほうが不要な分岐を見せないことでレビュー観点もシンプルになる気がします。

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.

3 participants