# Best Time to Buy and Sell Stock III in Python

Suppose we have an array for which the ith element is representing the price of a given stock on day i. We have to devise an algorithm to find the maximum profit. We can complete at most two transactions. So if the given prices are [3,3,5,0,1,3,1,4], then the result will be 6, as we will buy on day 4 (price 0), then sell on day 6, (price 3), so profit is 3 – 0 = 3. Now but on day 7 (price 1), and sell on day 8 (price 4) so profit is 4 – 1 = 3.

To solve this, we will follow these steps −

• n := size of s, m := size of t. Update s and t by concatenating blank spaces before them

• Make one matrix of size (n + 1) x (m + 1)

• set dp[0, 0] := 1, then set 1 for 0th column of all row, put 1

• for i in range 1 to n

• for j in range 1 to m

• if s[i] = t[j], then

• dp[i, j] := dp[i – 1, j – 1]

• dp[i, j] := dp[i, j] + dp[i – 1, j]

• return dp[n, m]

## Example

Let us see the following implementation to get better understanding −

Live Demo

class Solution(object):
def maxProfit(self, p):
if not p:
return 0
n = len(p)
dp = [0 for i in range(n)]
ans = 0
xmin = p[0]
for i in range(1,n):
xmin = min(xmin,p[i])
dp[i] = max(dp[i],p[i]-xmin)
ans = max(ans,dp[i])
xmax = [0 for i in range(n)]
xmax[-1] =p[-1]
tempp = 0
for i in range(n-2,-1,-1):
xmax[i] = max(xmax[i+1],p[i])
xmin = [p[-1],n]
for i in range(n-2,-1,-1):
tempp = max(tempp,xmax[i+1]-p[i+1])
ans = max(ans,dp[i]+tempp)
return ans
ob = Solution()
print(ob.maxProfit([3,3,5,0,1,3,1,4]))

## Input

[3,3,5,0,1,3,1,4]

## Output

6