minisoba
4/20/2019 - 9:35 PM

buy sell stock.cpp

//
#include <iostream>

using namespace std;

struct StockPrice {
    struct P {
        long buy;
        long sell;
        P() : buy(0), sell(0) {            
        }
    };

    // collect a buy / sell and maximise a profit on stock price series
    void compute(const vector<string>& v) {
        P walk;
        vector<P> res;
        for (const auto& it : v) {
            auto num = strtol(it.c_str(), NULL, 0);
            if ((!walk.buy && !walk.sell) || (walk.buy > num && !walk.sell)) {
                // finding local minima
                walk.buy = num;
            }
            else if (!walk.sell || (walk.buy && walk.sell < num)) {
                walk.sell = num;
            }
            else {
                res.emplace_back(walk);
                walk = P();
                walk.buy = num;
            }
        }
        if (walk.buy && walk.sell) {
            res.emplace_back(walk);
        }
    }
};