Best Time to Buy and Sell Stock III
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 == 0) return 0;
vector<int> min_p(n), max_p(n);
min_p[0] = prices[0];
for(int i = 1; i < n; i ++) min_p[i] = min(min_p[i-1], prices[i]);
max_p[n-1] = prices[n-1];
for(int i = n - 2; i >= 0; i --) max_p[i] = max(max_p[i+1], prices[i]);
int ret = 0;
int tmp = 0;
for(int i = 0; i < n; i ++){
tmp = max(tmp, prices[i] - min_p[i]);
ret = max(ret, tmp + max_p[i] - prices[i]);
}
return ret;
}
};
551

被折叠的 条评论
为什么被折叠?



