Conversation
| let Some((mut holding_price, remaining_prices)) = prices.split_first() else { | ||
| return 0; | ||
| }; |
There was a problem hiding this comment.
自分がこの書き方するならあえて下のように分けたいですね。
| let Some((mut holding_price, remaining_prices)) = prices.split_first() else { | |
| return 0; | |
| }; | |
| let Some((first_price, remaining_prices)) = prices.split_first() else { | |
| return 0; | |
| }; | |
| let mut holding_price = *first_price; |
| if price < holding_price { | ||
| holding_price = price; | ||
| continue; | ||
| } | ||
|
|
||
| total_profit += price - holding_price; | ||
| holding_price = price; |
There was a problem hiding this comment.
holding_priceの更新はif節の成立によらず行うのでわざわざ別々に書かれていることに違和感を持ちました。
| if price < holding_price { | |
| holding_price = price; | |
| continue; | |
| } | |
| total_profit += price - holding_price; | |
| holding_price = price; | |
| if price < holding_price { | |
| total_profit += price - holding_price; | |
| } | |
| holding_price = price; |
There was a problem hiding this comment.
あと、ここのif分岐をなくして常にprice - holding_priceと0のうち大きい方をtotal_profitに加えると書く方法もあると思います。
There was a problem hiding this comment.
holding_priceの更新はif節の成立によらず行うのでわざわざ別々に書かれていることに違和感を持ちました。
重複しているコードなので違和感を感じるのがソフトウェアエンジニアとしての普通の反応だと思いました。
提案頂いたコードはifの条件式を反転して動作することを確認しました。
if holding_price < price {
total_profit += price - holding_price;
}
holding_price = price;あと、ここのif分岐をなくして常にprice - holding_priceと0のうち大きい方をtotal_profitに加えると書く方法もあると思います。
なるほど、こんな感じになると理解しました。
ありがとうございました。
let min_profit = 0;
for price in remaining_prices {
total_profit += min_profit.max(price - holding_price);
holding_price = price;
}There was a problem hiding this comment.
すみません、不等号の向き逆でした.
ご提案で違和感ないです。(0はハードコードしちゃってもいいかもですが、そちらだとより意図が明確で良いですね。)
| continue; | ||
| } | ||
|
|
||
| total_profit += price - holding_price; |
There was a problem hiding this comment.
また、holding_priceという命名にも違和感があります。
holdする(つまり現金から株にする)かどうかは未来のpriceに依存して初めて決まるので、単にprevious_priceの方が自然だと思います。
問題: 122. Best Time to Buy and Sell Stock II
次に解く問題: 139. Word Break
ファイルの構成:
./src/bin/<各ステップ>.rs