原题链接https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/
Say you have an array for which the ith element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete at most k transactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
和第三题类似,使用动态规划,我们发现对于一个大小为n的数组来说,最多交易n/2次,因此对于k>= n/2的情况,就退化成第2版的情况,所以只需要将大于0的加起来就行了
class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
if (prices.size() < 2)return 0;
vector<int>cur(prices.size(), 0);
vector<int>pre(prices.size(), 0);
vector<int>nums(prices.size());
int Max = 0;
for (int i = 1; i < prices.size(); ++i)
nums[i] = prices[i] - prices[i - 1];
if (k >= prices.size() / 2)
{
for (int i = 1; i < prices.size(); ++i)
if (nums[i] > 0)Max += nums[i];
return Max;
}
for (int j = 1; j <= k; ++j)
{
Max = 0;
for (int i = j; i < prices.size(); ++i)
{
cur[i] = max(cur[i - 1], pre[i - 1]) + nums[i];
pre[i - 1] = Max;
if (cur[i] > pre[i - 1])
Max = cur[i];
}
}
return Max;
}
};