LeetCode 面试必备100题:Best Time to Buy and Sell Stock 买卖股票的最佳时机


🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏:LeetCode面试必备100题(优质好文持续更新中……)🚀


目录

一、题意

二、样例

三、解题思路

四、代码实现

五、题目链接


一、题意

股票价格存储到了一个数组 prices 中,其中 prices[i] 是股票在第 i 天的价格。希望通过选择某一天购买一只股票并选择未来的另一天出售该股票来获得最大化利润。如果可以,则输出获得的最大利润,如果无法获得任何利润,则返回 0。

限制条件:

1 <= prices.length <= 10^5

0 <= prices[i] <= 10^4

二、样例

1. 样例一

输入:prices = [7,1,5,3,6,4]

输出:5

在第 2 天买入(价格为 1),并在第 5 天卖出(价格为 6),利润为 6-1 = 5。

注意:不允许在第 2 天买入并在第 1 天卖出,必须先买入再卖出。

2. 样例二

输入:prices = [7,6,4,3,1]

输出:0

在上述情况下,无法获得任何利润,所以是0。

三、解题思路

依次遍历所有股票价格,使用 minProfit 记录之前最低的价格(注意:初始化为最大值),每次与当前价格做差价得到利润,每次更新最大利润 maxProfit,直到遍历完所有价格。

四、代码实现

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int maxProfit = 0, minPrice = 1e4+5; //初始化一个最大值
        for (int price : prices) {
            minPrice = min(minPrice, price); //计算最小价格
            maxProfit = max(maxProfit, price - minPrice); //更新最大利润
        }
        return maxProfit;
    }
};

上述代码中,1e4 + 5 代表 10^4 + 5,因为求的是最低价格,所以先初始化一个最大值(数组中最大值为10^4),每次更新最大利润 maxProfit。

五、题目链接

Best Time to Buy and Sell Stock


🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬 


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值