---
# System prepended metadata

title: 'LeetCode #121 [Best Time to Buy and Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock)'
tags: [LeetCode, Easy, Dynamic Programming]

---

###### tags: `LeetCode` `Dynamic Programming` `Easy`
# LeetCode #121 [Best Time to Buy and Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock)
### (Easy)
給定一個數組 prices ，它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。
你只能選擇 某一天 買入這隻股票，並選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。
返回你可以從這筆交易中獲取的最大利潤。如果你不能獲取任何利潤，返回 0 。


---
遍歷prices, 找到最小買入價, 並隨之更新最大獲利為prices[i]-minprice, 若在i點之前的最大獲利超越了i點的獲利(即便i點有了歷史最低買入價), 那最大獲利依然不變。


---
```
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int minprice=INT_MAX;
        int maxpro=0;
        for(int i=0;i<prices.size();i++){
            minprice=min(minprice,prices[i]);
            maxpro=max(maxpro,prices[i]-minprice);
        }
        return maxpro;
    }
};
```