【发布时间】:2019-03-12 13:59:55
【问题描述】:
从本网站提出的问题: https://www.interviewbit.com/problems/best-time-to-buy-and-sell-stocks-iii/
假设您有一个数组,其中第 i 个元素是给定股票在第 i 天的价格。
设计一个算法来找到最大的利润。您最多可以完成两笔交易。
注意: 您不能同时进行多笔交易(即,您必须先卖出股票,然后再购买)。
我的解决方案:
int Solution::maxProfit(const vector<int> &A) {
int i = 0, sz = A.size();
int buy_price, sell_price;
int profit, max_profit1 = 0, max_profit2 = 0;
while(i<sz){
while(i<sz-1 && A[i+1] < A[i]) ++i;
buy_price = A[i];
while(i<sz-1 && A[i+1] > A[i]) ++i;
sell_price = A[i];
profit = sell_price-buy_price;
if(profit > max_profit2) {
swap(max_profit1, max_profit2);
max_profit2 = profit;
}
else if(profit > max_profit1) max_profit1 = profit;
++i;
}
return max_profit1 + max_profit2;
}
我的想法是跟踪所有利润(我以局部最小值买入并以局部最大值卖出);并拿起前两个。我跟踪变量 max_profit1 和 max_profit2 中的 2 个最大利润,其中 max_profit1
我对各种情况进行了尝试并得到了所需的答案,但我在 OJ 上提交的内容不正确。请帮助我指出该方法中的缺陷-希望在这种情况下避免使用 DP。提前致谢!
【问题讨论】:
标签: algorithm