返回

小六六带你刷力扣贪心算法之股票买卖的最佳时机2

后端


各位观众老爷大家好,小六六来啦。今天,我将继续带大家一起刷一道关于贪心算法的力扣题目,题目是“买卖股票的最佳时机2”。




题目分析

这道题的题目要求我们找到股票的最佳买卖时机,以便获得最高的利润。题目中假设我们只能买卖一次股票,即买入股票后只能卖出一次,反之亦然。

为了解决这道题,我们可以使用贪心算法。贪心算法是一种在每一步都做出当前最优选择的方法。在解决这道题时,我们可以在每一天都检查当前的股票价格,如果当前股票价格低于我们买入股票的价格,则将买入股票的价格更新为当前股票价格,并将卖出股票的价格也更新为当前股票价格。如果当前股票价格高于我们卖出股票的价格,则将卖出股票的价格更新为当前股票价格,并计算出当前的利润。如果当前利润大于我们之前获得的最大利润,则将最大利润更新为当前利润。

按照这种方法,我们可以在遍历整个股票价格数组后得到最大的利润。

算法实现

def maxProfit(prices):
    maxProfit = 0
    buyDay = 0
    sellDay = 0
    currentDay = 0

    for i in range(1, len(prices)):
        if prices[i] < prices[buyDay]:
            buyDay = i
            sellDay = i
        elif prices[i] > prices[sellDay]:
            sellDay = i
            currentProfit = prices[sellDay] - prices[buyDay]
            if currentProfit > maxProfit:
                maxProfit = currentProfit

    return maxProfit


# 测试代码
prices = [7, 1, 5, 3, 6, 4]
print(maxProfit(prices))  # 输出:5

算法复杂度分析

这道题的算法复杂度是O(n),其中n是股票价格数组的长度。这是因为我们在算法中使用了一个循环来遍历股票价格数组,而在循环中,我们只需要进行一些简单的比较和计算,因此算法的复杂度是线性的。

总结

这道题是一道典型的贪心算法题目。通过使用贪心算法,我们可以找到股票的最佳买卖时机,以便获得最高的利润。这道题的算法复杂度是O(n),其中n是股票价格数组的长度。