LeetCode高频100题刷题记录之——买卖股票的最佳时机

该博客介绍了如何解决寻找股票交易中最大利润的问题。通过从数组的第一天开始,不断更新最低买入价和最高卖出价,可以在遍历过程中找到最佳买卖点,从而实现最大利润。代码实现使用Python,时间复杂度为O(n)。
摘要由CSDN通过智能技术生成

1 问题描述及解题思路分析

给定一个数组,其中每个数代表了同一支股票在某一天的价格,天数随索引数的增长而增长,要求找出合适的买点与卖点,使之可以获得最大利润。

这题算是目前刷到过的最简单的题目了,十分钟解决,其实思路很简单:我们从第一天开始买入,储存买入价格为 B B B,同时初始化卖出价格也为当前买入价格 S S S,这样我们计算出的利润 P = 0 P=0 P=0,符合题目要求,也意味着目前获取不到利润,后面的时候,假如有一天的价格 p r i c e s [ i ] prices[i] prices[i]比卖出价格更高,我们令 S = p r i c e s [ i ] S=prices[i] S=prices[i],计算利润为 P = m a x ( P , S − B ) P=max(P,S-B) P=max(P,SB);假如有一天的价格 p r i c e s [ i ] prices[i] prices[i]比买入价格更低,我们同步更新买入与卖出价格为 S = B = p r i c e s [ i ] S=B=prices[i] S=B=prices[i],因为卖出一定要在买入之后。假如遇到一个更低的价格 B [ k ] B[k] B[k],前面的买入价格 B [ k − 1 ] B[k-1] B[k1]就可以告一段落了,因为 B [ k ] B[k] B[k]后面的卖出价格减去 B [ k ] B[k] B[k]一定大于减去 B [ k − 1 ] B[k-1] B[k1]的结果,同时,如果后面没取得更好的利润,我们前面计算过的利润也仍然是保存起来的。

2 代码实现

python代码实现如下:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        buy = prices[0]  # 先定义从第一天买入
        sell = prices[0]  # 先定义一个卖出价格,为买入价格,这样确保利润为0
        profit = 0  # 定义初始利润为0
        for price in prices:
            if sell < price:  # 表明当前价格高于我上一个卖出价格,在这个时刻卖出可以获得更多利润
                sell = price
                profit = max([sell - buy, profit])
            elif price < buy:  # 表明出现了更低的买点,这时候要把卖点也更新,因为卖点要在买点之后
                buy = price
                sell = price
        return profit

时间复杂度为 O ( n ) O(n) O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值