您的位置:首页 > 其它

[leetcode][DP] Best Time to Buy and Sell Stock III

2015-05-21 22:22 423 查看
题目:

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 two transactions.

Note:

You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n <= 1) return 0;
int lowestPrice = prices[0];//从第0开始到当天的最低价
int highestPrice = prices[n-1];//从当天到最后一天的最高价
//创建table
int *tableForward = new int
;//tableForward[i]表示0...i天内所得的最大利润
int *tableBackward = new int
;//tableBackward[i]表示i...n天内所得的最大利润
//table初始化
tableForward[0] = 0;
tableBackward[n-1] = 0;
//填tableForward
for(int i = 1; i < n; ++i){
if(prices[i] < lowestPrice) lowestPrice = prices[i];
tableForward[i] = prices[i]-lowestPrice > tableForward[i-1] ? prices[i]-lowestPrice : tableForward[i-1];
}
//填tableBackward
for(int i = n-2; i >= 0; --i){
if(prices[i] > highestPrice) highestPrice = prices[i];
tableBackward[i] = highestPrice - prices[i] > tableBackward[i+1] ?  highestPrice - prices[i] : tableBackward[i+1];
}
//选出对应位置之和的最大值
int res = tableForward[0] + tableBackward[0];
for(int i = 1; i < n; ++i){
if(tableForward[i]+tableBackward[i] > res) res = tableForward[i]+tableBackward[i];
}
//释放内存
delete []tableForward;
delete []tableBackward;
//返回结果
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: