---
# System prepended metadata

title: 121. Best Time to Buy and Sell Stock
tags: [Leetcode, python, c++, Top 100 Liked Questions, easy, dynamic programming]

---

###### tags: `Leetcode` `easy` `dynamic programming` `python` `c++` `Top 100 Liked Questions`

# 121. Best Time to Buy and Sell Stock

## [題目來源: ]https://leetcode.com/problems/best-time-to-buy-and-sell-stock/

## 題目:
You are given an array prices where prices[i] is the price of a given stock on the ith day.

You want to maximize your profit by choosing a **single day** to buy one stock and choosing a **different day in the future** to sell that stock.

Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.

## 解題思路:
兄弟題目: [122. Best Time to Buy and Sell Stock II](/nOzARxUKRl-R9qKhT-1HLQ)
* 每次比較最小買的價格，並更新獲利

## Python:
``` python=
class Solution(object):
    def maxProfit(self, prices):
        profit = 0
        buy = 100000
        for i in range(len(prices)):
            buy=min(buy, prices[i])
            profit=max(profit, prices[i]-buy)
        return profit

if __name__ == '__main__':
    result = Solution()
    prices = [7,1,5,3,6,4]
    ans = result.maxProfit(prices)
    print(ans)
```

## C++:
``` cpp=
#include<iostream>
#include<vector>
using namespace std;

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> res={1};
        for (int i=0; i<rowIndex; i++){
            for (int j=res.size()-1; j>0; j--){
                res[j]+=res[j-1];
            }
            res.push_back(1);
        }
        return res;
    }
};

int main(){
    Solution res;
    vector<int>ans=res.getRow(4);
    for (int i=0; i<ans.size(); i++){
        cout<<ans[i]<<" ";
    }
    cout<<endl;
    return 0;
}

```