您的位置:首页 > 其它

买卖股票的最佳时机 IV -LintCode

2017-10-03 19:36 363 查看
假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格。

设计一个算法来找到最大的利润。你最多可以完成 k 笔交易。

注意事项:

你不可以同时参与多笔交易(你必须在再次购买前出售掉之前的股票)

样例:

给定价格 = [4,4,6,1,1,4,2,5], 且 k = 2, 返回 6.

挑战 :

O(nk) 时间序列。

思路见: http://blog.csdn.net/linhuanmars/article/details/23236995

#ifndef C393_H
#define C393_H
#include<iostream>
#include<vector>
using namespace std;
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 (prices.empty())
return 0;
int len = prices.size();
if (K > len / 2)
{
int max = 0;
for (int i = 1; i < len; ++i)
{
int diff = prices[i] - prices[i - 1];
max += maxVal(0, diff);
}
return max;
}
vector<int> global(K + 1, 0);
vector<int> local(K + 1, 0);
for (int i = 0; i < len - 1; ++i)
{
int diff = prices[i + 1] - prices[i];
for (int j = K; j >= 1; --j)
{
local[j] = maxVal(global[j - 1] + maxVal(diff, 0), local[j] + diff);
global[j] = maxVal(global[j], local[j]);
}
}
return global[K];
}
int maxVal(int a, int b)
{
return a > b ? a : b;
}
};
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: