Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions 122/122.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
## 何も見ずに解いてみる

単純に価格が上がったときの差を全部足していけばよさそう。
問題文の"you can buy it then immediately sell it on the same day."はどういう意図だろう?これができてもできなくても答えは変わらない気がしますが・・・

```cpp
class Solution {
public:
int maxProfit(vector<int>& prices) {
int profit = 0;
for (int i = 1; i < prices.size(); ++i) {
int price_diff = prices[i] - prices[i - 1];
profit += std::max(0, price_diff);
}
return profit;
}
};
```

## 他の人のコードを見てみる

https://github.com/tokuhirat/LeetCode/pull/38/files
https://github.com/irohafternoon/LeetCode/pull/41/files while文で山と谷を探すやり方は面白いと思った。
https://github.com/hroc135/leetcode/pull/36/files
https://github.com/goto-untrapped/Arai60/pull/59/files

## 最終コード

iを0からprices.size() - 1まで回して、prices[i+1]とprices[i]の差を測るのも考えたが、個人的に未来の価格を見るというのはちょっとだけ直感的に違和感があったのでこちらにした。

Choose a reason for hiding this comment

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

未来の価格を見られるとしたら、という観点で株の売買戦略を最適化するというのは、株式の売買モデルを作る文脈だとあるかもしれませんね。少なくとも理論上の最大利益を求められると、一応ベンチマーク (どんなモデルも絶対にそれを超えないという意味で) ができるので、作ったモデルが変な挙動していないかわかるかもしれません。

(大学院の授業で上のようなことをやりましたが、そっち方面の専門家ではないのでどれくらい現実で価値があるのかはわかりませんので遊び程度の話として)


```cpp
class Solution {
public:
int maxProfit(std::vector<int>& prices) {
int profit = 0;
for (int i = 1; i < prices.size(); ++i) {
int price_diff = prices[i] - prices[i-1];
profit += std::max(0, price_diff);
}
return profit;
}
};

Choose a reason for hiding this comment

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

読みやすいです。

```