Best Time to Buy and Sell Stock I II III(C++实现)

// Best Time to Buy and Sell Stock I
 
class Solution {
public:
    int maxProfit(vector<int> &prices) {
        if(prices.size() < 2) return 0;
        int mj = 0, mjIdx = 0;
        int ret = 0;
        for(int i = 1; i < prices.size(); ++i) {
            if(prices[i] >= prices[i-1]) {
                mj = prices[i] - prices[mjIdx];
            } else {
                if(prices[i] < prices[mjIdx]) {
                    mjIdx = i; 
                }
            }
            ret = max(ret, mj);
        }
        return ret;
    }
};
 
 
// Best Time to Buy and Sell Stock II
 
class Solution {
public:
    int maxProfit(vector<int> &prices) {
        if(prices.size() < 2) return 0;
        int ms = 0;
        int ret = 0;
        for(int i = 1; i < prices.size(); ++i) {
            if(prices[i] >= prices[i-1]) {
                 ms += prices[i] - prices[i-1];
            } else {
                ret += ms;
                ms = 0;
            }
        }
        ret += ms;
        return ret;
    }
};
 
// Best Time to Buy and Sell Stock III
 
class Solution {
public:
    int maxProfit(vector<int> &prices) {
        if(prices.size() < 2) return 0;
        int n = prices.size();
        vector<int> l(n);
        vector<int> r(n);
        
        int minv = prices[0];
        l[0] = 0;
        for(int i = 1; i < n; ++i) {
            minv = min(minv, prices[i]);
            l[i] = max(l[i-1], prices[i] - minv);
        }
        
        int maxv = prices[n-1];
        r[n-1] = 0;
        for(int i = n-2; i >= 0; --i) {
            maxv = max(maxv, prices[i]);
            r[i] = max(r[i+1], maxv - prices[i]);
        }
        
        int ret = 0;
        for(int i = 0; i < n; ++i) {
            ret = max(ret, l[i] + r[i]);
        }
        
        return ret;
    }
};

 

 

 欢迎关注微信公众号——计算机视觉 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值