计算买卖股票的最佳时机的Python程序
我们将在以下教程中创建一个Python程序来估计买卖股票的最佳时机。
那么,让我们开始吧。
理解Python项目
假设我们有一个数组 X ,其中 X[i] 表示第 n 天提供的股票的价格。我们需要计算最大利润。我们最多可以进行一次交易。(交易被认为是买入和卖出股票)。然而,我们必须记住,我们一次只能进行一次交易。因此,在购买新股之前,我们必须卖掉股票。
让我们考虑一个数组 X = [7, 1, 5, 3, 6, 4] ;那么输出将是 5 。正如我们所看到的,如果我们在第 2 天(索引 1 )购买,那么它将以 1 作为购买价格。然后,如果我们在第 5 天出售,我们将获得利润 6-1=5 。
让我们使用以下步骤解决这个问题
步骤1: 创建与数组 X 大小相同的两个数组 Lmin 和 Rmax ,并将它们填充为0
步骤2: Lmin[0] = A[0]
步骤3: 对于范围在 1 到长度为 X-1 之间的 n , Lmin[n] = Lmin[n-1]和X[n]的最小值
步骤4: Rmax[i-1] = X[i-1]
步骤5: 对于范围在从长度为 X-1 (包括)到 1 之间的 n , Rmax[n] = Rmax[n+1]和X[n]的最大值
步骤6: 设置 result = 0
步骤7: 对于范围在 0 到长度为 X-1 之间的 n , 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 。