当前位置 博文首页 > Linux猿:LeetCode 面试必备100题:Best Time to Buy and Sell S

    Linux猿:LeetCode 面试必备100题:Best Time to Buy and Sell S

    作者:[db:作者] 时间:2021-09-17 09:03


    🎈 作者: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


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


    cs