股票1

//
// Created by Administrator on 2021/7/27.
//

#ifndef C__TEST01_BESTTIMETOBUYANDSELLSTOCK_HPP
#define C__TEST01_BESTTIMETOBUYANDSELLSTOCK_HPP

#include <vector>
#include <iostream>
using namespace std;

class BestTimeToBuyAndSellStock {
    /*已知后面N天一支股票每天的价格为P0,P1...PN-1
     * 可以最多买一股卖一股
     * 求最大利润
     * 例子:
     * 输入:{3, 2, 3, 1, 2}
     * 输出:1(2买入,3卖出)
     * */
public:
    BestTimeToBuyAndSellStock(vector<int> priceN);
    int BestTimeToBuyAndSellStockDP(vector<int> &price);
private:
    vector<int> price;
};

BestTimeToBuyAndSellStock::BestTimeToBuyAndSellStock(vector<int> priceN):
price(priceN){
    price.resize(priceN.size());
}

int BestTimeToBuyAndSellStock::BestTimeToBuyAndSellStockDP(vector<int> &price) {
    if(price.empty()){
        return 0;
    }
    int n = price.size();

    vector<int> f(n+1);
    //f[n]表示第n天的最大利润
    f[0] = 0;
    for(int i = 0; i< price.size();++i){
        for (int j = i; j < price.size(); ++j) {
            f[j] = 0;
            if(price[j] - price[i] > f[j+1]){
                f[j+1] = price[j] - price[i];
            }
        }
    }
    return f[n];
}

#endif //C__TEST01_BESTTIMETOBUYANDSELLSTOCK_HPP

posted @ 2021-07-31 21:51  蘑菇王国大聪明  阅读(62)  评论(0编辑  收藏  举报