Leetcode 买卖股票的最佳时机

本文介绍了如何使用贪心算法解决股票买卖问题,通过计算历史最小价格和当天最大利润,找出交易中的最大利润。给出了一段C++代码实现这一思路。

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

题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

1. 解题思路分析:

这道题首先想到的最简单的办法就是暴力求解,用两个for循环解决,但是这种方法在数据量比较大的测试样例中会超时,所以在本篇就主要介绍贪心算法求解买卖股票的最佳时机

1.首先介绍一下贪心算法是什么

“贪心算法是一种寻找最优解问题的常用方法。它的基本思想是,从问题的某个初始解出发,通过一系列的局部最优选择,得到一个全局最优解。贪心算法每一步都按照某种指标选取最优的操作,而不考虑以后可能造成的影响。贪心算法可以简单描述为:大事化小,小事化了。”(以上介绍是从百度里摘抄的)

2. 本题为什么能用贪心算法,以及如何使用呢?

这道题有个很大的特点就是:买卖股票的时候,是有时间先后限制的。股票要先购买才能卖出,所以在遍历股票数组的时候,是只能按照从前往后的顺序遍历。
就比如说你买股票的时候,你只能知道历史和今天的情况,不知道以后的情况,这种时候就可以使用贪心算法了,也就是只需要算出,【历史以来(直到当天)的最大利润值】和【历史上的股票最小值】。
解释一下为什么需要知道这两个值:【最大利润值】是题目问的,所以肯定要有;【历史上股票最小值】可以是用来辅助计算‘当天可以获得的最大利润值’,然后【最大利润值】就由‘历史最大利润值’和‘当天最大利润值’比较选择更大的一方,所以这两个值都需要有。

2. 附代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值