最佳買賣股票時間IV
阿新 • • 發佈:2019-01-24
假設你有一個數組,它的第i個元素是一支給定的股票在第i天的價格。
設計一個演算法來找到最大的利潤。你最多可以完成 k
筆交易。
注意事項
你不可以同時參與多筆交易(你必須在再次購買前出售掉之前的股票)
您在真實的面試中是否遇到過這個題?Yes樣例給定價格 = [4,4,6,1,1,4,2,5]
, 且 k = 2
, 返回 6
.
O(nk) 時間序列。
點題:這道題花了我很長時間來理解,特別是global/local演算法模式,理解起來比較費力。但是下面的演算法理解起來就要容易很多。
class Solution { public: /* * @param K: An integer * @param prices: An integer array * @return: Maximum profit */ int maxProfit(int K, vector<int> &prices) { // write your code here if (K == 0 || prices.size() < 2) { return 0; } // trade as more as possible if (K >= prices.size()) { int max_profix = 0; for (int i = 1; i < prices.size(); i++) { if (prices[i] > prices[i - 1]) { max_profix += (prices[i] - prices[i - 1]); } } return max_profix; } vector<vector<int>> buy(prices.size() + 1, vector<int>(K + 1, INT_MIN)); vector<vector<int>> sell(prices.size() + 1, vector<int>(K + 1, 0)); for (int i = 1; i <= prices.size(); i++) { for (int j = 1; j <= K; j++) { buy[i][j] = max(buy[i - 1][j], sell[i - 1][j - 1] - prices[i - 1]); sell[i][j] = max(sell[i - 1][j], buy[i - 1][j] + prices[i - 1]); } } return sell[prices.size()][K]; } };
http://blog.csdn.net/jc69186918/article/details/54926277