# Best Time to Buy and Sell Stock in Python

PythonServer Side ProgrammingProgramming

#### Beyond Basic Programming - Intermediate Python

Most Popular

36 Lectures 3 hours

#### Practical Machine Learning using Python

Best Seller

91 Lectures 23.5 hours

#### Practical Data Science using Python

22 Lectures 6 hours

Suppose we have an array A, here A[i] is indicating the price of a given stock on day i. We have to find the maximum profit. We can complete at most one transaction. (Transaction means to buy and sell stocks). But we have to keep in mind that we may not engage in multiple transactions at the same time. So we have to sell the stock before buying the new one.

Suppose the array is like A = [7, 1, 5, 3, 6, 4], then the result will be 5. As we can see, if we buy on day 2 (index 1), then it will take 1 as a buying price. Then if we sell on day 5, the profit will be 6 – 1 = 5.

To solve this, follow these steps −

• create two arrays leftMin, and rightMax of size same as A, and fill them with 0s
• leftMin = A
• for i in range 1 to length of A – 1, leftMin[i] = minimum of leftMin[i – 1] and A[i]
• rightMax[n-1] = A[n – 1]
• for i in range length of A – 1 down to 1, rightMax[i] = maximum of rightMax[i + 1] and A[i]
• set answer := 0
• for i in range 0 to length of A – 1, answer := max of answer and rightMax[i + 1] – leftMin[i]

Let us see the implementation to get better understanding

## Example

Live Demo

class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
if not prices:
return 0
leftMin,rightMax = [0 for i in range(len(prices))],[0 for i in range(len(prices))]
leftMin = prices
for i in range(1,len(prices)):
leftMin[i] = min(leftMin[i-1],prices[i])
#print(leftMin)
rightMax[-1]= prices[-1]
for i in range(len(prices)-2,-1,-1):
rightMax[i] = max(rightMax[i+1],prices[i])
#print(rightMax)
ans = 0
for i in range(len(prices)-1):
ans = max(ans,rightMax[i+1]-leftMin[i])
return ans
ob1 = Solution()
print(ob1.maxProfit([7,2,5,8,6,3,1,4,5,4,7]))

## Input

prices = [7,2,5,8,6,3,1,4,5,4,7]

## Output

6