diff --git a/121.md b/121.md new file mode 100644 index 0000000..4efdd6e --- /dev/null +++ b/121.md @@ -0,0 +1,45 @@ +## 何も見ずに解いてみる + +```cpp +class Solution { +public: + int maxProfit(vector& prices) { + int max_profit = 0; + int min_price = std::numeric_limits::max(); + for (int price : prices) { + max_profit = std::max(max_profit, price - min_price); + min_price = std::min(price, min_price); + } + return max_profit; + } +}; +``` + +## 他の人のコードを見る + +https://github.com/ryosuketc/leetcode_arai60/pull/50/files +https://github.com/tokuhirat/LeetCode/pull/37/files +https://github.com/irohafternoon/LeetCode/pull/40/files +https://github.com/Ryotaro25/leetcode_first60/pull/41/files + +後ろから見ていくと逆に最大値を記録することで解けるというのはたしかにという感じだった。 + +## 最終コード + +min_priceとmax_profitを操作する順番を変えてみました。 +`変数 = max(変数, 新しい候補)`みたいなことをやるときは`max(新しい候補, 変数)`よりは`変数 = max(変数, 新しい候補)`の方がよさそうでしょうか。 + +```cpp +class Solution { +public: + int maxProfit(std::vector& prices) { + int min_price = std::numeric_limits::max(); + int max_profit = 0; + for (int price : prices) { + min_price = std::min(min_price, price); + max_profit = std::max(max_profit, price - min_price); + } + return max_profit; + } +}; +```