leetcode 188. 买卖股票的最佳时机 IV

给定一个数组,它的第 i 个元素是一支给定的股票在第 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。

注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [2,4,1], k = 2
输出: 2
解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。

示例 2:

输入: [3,2,6,5,0,3], k = 2
输出: 7
解释: 在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。
     随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。

 1 #include<cmath>
 2 class Solution {
 3 public:
 4     int maxProfit(int k, vector<int> &prices) {
 5         int len = prices.size(), ans=0;
 6         if (k>len/2){
 7             for (int i=1; i<len; ++i)
 8                 ans += max(prices[i] - prices[i-1],0);
 9             return ans;
10         }
11         vector<int> buy(k+1, -99999999), sale(k+1, 0);
12         for(int i=0; i<prices.size(); i++){
13             for(int j=k; j>0; j--){
14                 sale[j] = max(sale[j], buy[j]+prices[i]);
15                 buy[j] = max(buy[j], sale[j-1]-prices[i]);
16             }
17         }
18         return sale[k];
19         
20     }
21 };
有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
原文地址:https://www.cnblogs.com/mr-stn/p/9201827.html