# Best Time to Buy and Sell Stock

## Problem Statement

<br>

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`.

&#x20;

**Example 1:**

<pre><code><strong>Input: prices = [7,1,5,3,6,4]
</strong><strong>Output: 5
</strong><strong>Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
</strong>Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.
</code></pre>

**Example 2:**

<pre><code><strong>Input: prices = [7,6,4,3,1]
</strong><strong>Output: 0
</strong><strong>Explanation: In this case, no transactions are done and the max profit = 0.
</strong></code></pre>

&#x20;

**Constraints:**

* `1 <= prices.length <= 105`
* `0 <= prices[i] <= 104`

## Intuition

```
"taking maximum profit available

Each step we update minimum
Remembering the min along the way"
```

### Links

<https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/>

### Video Links

<https://www.youtube.com/watch?v=excAOvwF_Wk&ab_channel=takeUforward>

### Approach 1:

```
DP Remembering the minimum along the way
```

{% code title="C++" lineNumbers="true" %}

```cpp
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int mini = prices[0];
        int profit = 0;

        for(int i=1; i<prices.size(); i++){
            /*
            taking maximum profit available
            */
            int cost = prices[i] - mini;
            profit = max(cost, profit);

            /*
            Each step we update minimum

            Remembering the min along the way
            */
            mini = min(mini, prices[i]);
        }

        return profit;
    }
};
```

{% endcode %}

### Approach 2:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 3:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Similar Problems
