您的位置:首页 > 其它

股票利润最大化(交易次数k)

2017-01-18 21:11 169 查看

Best Time to Buy and Sell Stock IV

问题描述:leetcode:188

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).

思路:





按照思路写的代码:

int maxProfit(int k, vector<int>& prices) {
if(k==0||prices.size()<2){
return 0;
}
}
int maxdiff = 0;
vector<vector<int> > T(k+1, vector<int> (prices.size(), 0));
for(int i=1; i<k+1; i++){
maxdiff = T[i-1][0] - prices[0] ;
for(int j=1; j<prices.size(); j++){
T[i][j] = max(T[i][j-1], maxdiff+prices[j]);
maxdiff = max(maxdiff, T[i-1][j] - prices[j]);
}
}
return T[k][prices.size()-1];

}


但是该代码运行时会报错:



也就是说当k=1000000000时会导致内存出错;所以可以优化代码,也就是当

k>prices.size()


时使用不限定交易次数时的算法(Best Time to Buy and Sell Stock II;leetcode122)

修改之后代码:

int maxProfit(int k, vector<int>& prices) {
if(k==0||prices.size()<2){
return 0;
}

if(k>prices.size()){
int ans = 0;
for(int i=1; i<prices.size(); i++){
if(prices[i]>prices[i-1]){
ans += (prices[i]-prices[i-1]);
}
}
return ans;
}
int maxdiff = 0;
vector<vector<int> > T(k+1, vector<int> (prices.size(), 0));
for(int i=1; i<k+1; i++){
maxdiff = T[i-1][0] - prices[0] ;
for(int j=1; j<prices.size(); j++){
T[i][j] = max(T[i][j-1], maxdiff+prices[j]);
maxdiff = max(maxdiff, T[i-1][j] - prices[j]);
}
}
return T[k][prices.size()-1];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐