博客
关于我
leetcode题解-买卖股票的最佳时机
阅读量:791 次
发布时间:2023-01-31

本文共 918 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要设计一个算法来计算在给定股票价格数组中能够获得的最大利润。我们可以尽可能地完成更多的交易(多次买卖一支股票),但必须保证每次购买前出售掉之前的股票。

方法思路

我们可以使用贪心算法来解决这个问题。贪心算法在这里的思路是,每当我们看到股票价格比上一天高时,就立即卖出,这样可以记录每次的小利润,从而累积起来得到最大利润。这种方法的时间复杂度是 O(n),非常高效。

具体来说,我们遍历价格数组,从第二个元素开始检查每个元素是否大于前一个元素。如果是,则计算这次卖出的利润,并累加到总利润中。如果不是,则不进行任何操作。这种方法确保了我们在每次能够获得正利润时都立即卖出,从而最大化总利润。

解决代码

def maxProfit(prices):    if len(prices) <= 1:        return 0    max_profit = 0    prev_price = prices[0]    for current_price in prices[1:]:        if current_price > prev_price:            max_profit += current_price - prev_price            prev_price = current_price        else:            prev_price = current_price    return max_profit

代码解释

  • 初始化变量:我们初始化 max_profit 为 0,用于记录总的最大利润。prev_price 记录前一个股票价格,初始化为第一个价格。
  • 遍历价格数组:从第二个元素开始遍历数组中的每一个价格。
  • 检查利润:对于当前价格,如果它大于前一个价格,则计算利润并加到 max_profit 中,然后更新 prev_price 为当前价格。如果不是,则保持 prev_price 为当前价格。
  • 返回结果:遍历结束后,返回总利润。
  • 这种方法确保了我们在每次能够获得正利润时都立即卖出,从而累积了最大的利润,适用于多次交易的情况。

    转载地址:http://zhgyk.baihongyu.com/

    你可能感兴趣的文章
    leetcode题解347-前 K 个高频元素
    查看>>
    leetcode题解4-寻找两个正序数组的中位数
    查看>>
    leetcode题解41-缺失的第一个正数原来如此简单
    查看>>
    leetcode题解434-字符串中的单词数(双指针经典)
    查看>>
    leetcode题解46-全排列
    查看>>
    leetcode题解48-旋转图像
    查看>>
    leetcode题解5-最长回文子串
    查看>>
    leetcode题解50-Pow(x,n)
    查看>>
    leetcode题解53-最大子序和
    查看>>
    leetcode题解538-把二叉搜索树转化为累加树
    查看>>
    leetcode题解54-螺旋矩阵
    查看>>
    leetcode题解56-合并区间
    查看>>
    leetcode题解62-不同路径
    查看>>
    leetcode题解66-加一
    查看>>
    leetcode题解70-爬楼梯
    查看>>
    leetcode题解72-编辑距离
    查看>>
    leetcode题解75-颜色分类
    查看>>
    leetcode题解767-重构字符串
    查看>>
    leetcode题解77-子集
    查看>>
    leetcode题解77-组合
    查看>>