Leetcode 188 Solution

This article provides solution to leetcode question 188 (best-time-to-buy-and-sell-stock-iv)

https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv

Solution

class Solution {
    int maxProfit(vector<int>& prices) {
        int total = 0;

        for (int i = 1; i < prices.size(); i++)
        {
            if (prices[i] - prices[i - 1] > 0)
                total += prices[i] - prices[i - 1];
        }

        return total;
    }

public:
    int maxProfit(int k, vector<int>& prices) {
        if (prices.size() == 0)
            return 0;

        if (k >= prices.size())
            return maxProfit(prices);

        vector<int> dp1(k + 1);
        vector<int> dp2(k + 1);

        for (int i = 0; i < prices.size() - 1; i++)
        {
            int diff = prices[i + 1] - prices[i];

            for (int j = k; j >= 1; --j)
            {
                dp2[j] = max(dp2[j] + diff, dp1[j - 1] + max(diff, 0));
                dp1[j] = max(dp1[j], dp2[j]);
            }
        }

        return dp1[k];
    }
};