用Python买卖股票的最佳时间
假设我们有一个数组A,这里A[i]表示第i天给定股票的价格。我们必须找到最大的利润。我们最多可以完成一笔交易。(交易是指买卖股票)。但是我们必须记住,我们可能不会同时进行多项交易。因此,在购买新股票之前,我们必须出售股票。
假设数组像A=[7、1、5、3、6、4],那么结果将是5。如我们所见,如果我们在第2天(索引1)购买,那么它将取1作为购买价格。然后,如果我们在第5天卖出,利润将为6-1=5。
为了解决这个问题,请遵循以下步骤-
创建两个与left相同的leftMin和rightMax数组,并用0s填充它们
leftMin[0]=A[0]
对于范围从1到A–1长度的i,leftMin[i]=leftMin[i–1]和A[i]的最小值
rightMax[n-1]=A[n–1]
对于范围从A–1到1的范围内的i,rightMax[i]=rightMax[i+1]和A[i]的最大值
设定答案:=0
对于范围从0到A–1长度的i,答案:=答案的最大值和rightMax[i+1]–leftMin[i]
返回答案
让我们看一下实现以获得更好的理解
示例
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[0] = prices[0] 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]))
输入值
prices = [7,2,5,8,6,3,1,4,5,4,7]
输出结果
6