[每日一题002]买卖股票的最佳时期

本文介绍了如何利用贪心策略解决LeetCode中的股票买卖问题,通过对比连续两天的股票价格,仅需遍历一次数组即可计算出最大利润。作者的C++代码实现显示,这种方法在时间复杂度上超过大部分用户,但能满足题目需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每日挑战(C++版)

在这里,我将开始每天练习LeetCode算法题,并将个人解决方案放在这里。


需求介绍

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的最大 利润 。

要求

  • 1 <= prices.length <= 3\times 10^{4}
  • 0 <= prices[i] <= 10^{4}

个人分析

从需求中可以看到,第二段话至关重要。你在任何时候最多只能持有一股股票 限定了购买条件,对应到数组中表现为只需要对数组进行一次遍历即可,不需要重复考虑每天股价之间的差值。你也可以先购买,然后在同一天出售 只需要考虑当天的股价是否高于入手时的股价,不需要考虑后续还会不会上涨。因此这是一道非常典型的贪心算法。

贪心的运用在,只需要关注今天的股价比昨天的高就抛售,今天的股价如果比昨天低,就存有的是今天的股票,而不是昨天的股票。(感觉这个例子不合适hhh,没有人能预知明天的股价比今天底,所以今天就把股票出了)。对应在数组里就是,prices[i] > prices[i-1],那么抛售,利润为prices[i] - prices[i-1]。否则第i天没有利润,且手上的股票变为第i天的股价。

例如:

  • prices[7, 1, 5, 3, 4, 6]。        
    1. 第一次赚钱是第1天买,第2天卖,利润+4。
    2. 第二次赚钱是第3天买,第4天卖,利润+1。
    3. 第三次赚钱是第4天买,第5天卖,利润+2。
    4. 总利润为7。

在上面这里例子中,可以第3天买,第5天卖,利润为3,但是总利润是相同的,因此没有必要考虑隔天的情况,只需要对当天和前一天进行判断即可。这就是这道题的贪心之处。

代码实现

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int result = 0;
        for(int i = 1; i < prices.size(); i++)
            result += max(0, prices[i] - prices[i-1]);
        return result;
    }
};
 

总结

上诉代码在时间上超过了89.86%的用户,内存上超过了24.24%的用户。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值