Python教程-用Python编写计算最佳买卖股票时间的程序

我们将创建一个Python程序,用于在以下教程中估算最佳的买入和卖出股票时间。
所以,让我们开始吧。
理解Python项目
假设我们有一个数组X,其中X[i]表示第n天提供的股票价格。我们需要计算最大的利润。我们最多可以执行一次交易(交易被认为是买入和卖出股票)。但是,我们必须记住,我们不可以同时进行多次交易。因此,在买新股之前必须卖出股票。
假设数组为X = [7, 1, 5, 3, 6, 4];那么输出将是5。正如我们所看到的,如果我们在第2天(索引1)购买,那么它将以1作为购买价格。然后,如果我们在第5天卖出,我们将获得6 - 1 = 5的利润。
让我们使用以下步骤来解决这个问题
步骤1: 创建两个数组Lmin和Rmax,大小与数组X相同,并用0填充它们。
步骤2: Lmin[0] = X[0]
步骤3: 对于n在范围1到X的长度-1,Lmin[n] = Lmin[n - 1]和X[n]的最小值
步骤4: Rmax[i - 1] = X[i - 1]
步骤5: 对于n在数组长度-1到1,Rmax[n] = Rmax[n + 1]和X[n]的最大值
步骤6: 设置result = 0
步骤7: 对于n在范围0到X的长度-1,result = result和Rmax[n + 1] - Lmin[n]的最大值
步骤8: 返回result
现在,让我们在下面的编码部分中理解这些步骤的实现:
项目代码
现在,让我们考虑以下Python程序,以计算买卖股票的最佳时间。
文件:stocksProgram.py
# defining a class
class Soln(object):
# defining the function to calculate the maximum profit
def max_Profit(self, price):
"""
:type prices: List[int]
:rtype: int
"""
# using the if conditional
if not price:
return 0
# creating two arrays
Lmin, Rmax = [0 for n in range(len(price))], [0 for n in range(len(price))]
Lmin[0] = price[0]
# using the for-loop
for n in range(1, len(price)):
Lmin[n] = min(Lmin[n - 1], price[n])
# printing the Lmin elements
print(Lmin)
Rmax[-1] = price[-1]
# using the for-loop
for n in range(len(price) - 2, -1, -1):
Rmax[n] = max(Rmax[n + 1], price[n])
# printing the Rmax elements
print(Rmax)
# assigning initial value of result
res = 0
# using the for-loop
for n in range(len(price) - 1):
res = max(res, Rmax[n + 1] - Lmin[n])
return res
# instantiating the class
obj_1 = Soln()
# printing the maximum profit for the provided Array
print(obj_1.max_Profit([7, 2, 5, 8, 6, 3, 1, 4, 5, 4, 7]))
输入:
price = [7, 2, 5, 8, 6, 3, 1, 4, 5, 4, 7]
输出:
[7, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1]
[8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7]
6
解释
在上面的代码片段中,我们定义了一个类。然后在类中定义了一个名为max_profit的函数,用于计算给定数组的最大利润。我们创建了两个相同大小的数组Lmin和Rmax,它们的元素都是0。然后,我们将Lmin数组的第一个元素的值分配给给定数组的第一个元素。我们使用for循环迭代数组的值到Lmin数组,并为用户打印它们。然后,我们对Rmax数组进行了类似的操作,并为用户打印其元素。接下来,我们将res变量的初始值分配为0。然后,我们再次使用for循环来估算最大利润。最后,我们实例化了类,并为用户打印了给定数组的最大利润。在上面的程序中,最大利润为6。