Leetcode - 121: Best Time to Buy and Sell Stock
Given a list of prices we need to find when is the best time to buy and sell a stock
What's the question?
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.
Let's check an example
Input: prices = [7,1,5,3,6,4]
Output: 5
Here, we are given prices for 6 days we need to tell how can we earn a maximum profit by buy a stock on some day and selling it on some another day
For the prices
list given above we see that the minimum price to buy the stock when going from left to right is 1
and after the price 1
the maximum price which the stock can be sold for is 6
so the profit becomes 6 - 1 = 5
.
Pretty Easy right! Let's translate this into some code
So, at the start we can initialize two variables minPrice
which will be price at the 0th index and profit
which will be 0
at the start.
Now as we iterate through the prices
list we will have two steps,
šµ Step - 1: Check if price
at current index is lesser than our minPrice
š¦ If True
at Step - 1: Update the minPrice
with the current price
šµ Step - 2: Update the profit
To update the profit we can find the maximum between the current profit and difference between the current price and minPrice
. If the minPrice
in the first step would be changed then the differene between the current price
and the minPrice
will be 0
. And if the profit
is greater than 0
it will remain unchanged and even if it's 0
it will remain 0
only.
Once the end of the for
loop is reached we return the profit
Let's code it out
def maxPrice(prices):
minPrice = min(prices)
profit = 0
for ix, price in enumerate(prices[1:]):
if price < minPrice:
minPrice = price
profit = max(profit, prices[ix] - minPrice)
return profit
That's it for this blog, hope you found this helpful. You can connect with me on Twitter