其他分享
首页 > 其他分享> > 买卖股票的最佳时机

买卖股票的最佳时机

作者:互联网

这是一个系列,也是dp经典题,特别写篇博客。

leetcode 121 买卖股票的最佳时机 简单
只能买卖一次股票,那只需要从第一天开始一次遍历,不停地更新买的最低价和能赚到的最大利润即可。

参考代码

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

leetcode122 买卖股票的最佳时机II 简单
可以多次买卖股票,但同时只能持有一支股票
只需要贪心即可,不停地扩大利润。

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

当然,差分数组也是可以的,但理解有些困难,因为它并没有模拟买入卖出的过程,但其本质和上述代码是一样的。

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

当然,还可以用动态规划,但在这道题上有些多余。毕竟接下来才是真正的重头戏。

力扣123 买卖股票的最佳时机III 困难
一下子从简单难度跃升为困难。
最多可以完成两笔交易,但还是只能同时最多拥有一支股票。

标签:买卖,int,股票,最佳时机,ans,prices
来源: https://www.cnblogs.com/S-N-O-R-L-A-X/p/15158548.html