当前位置: 首页 > 知识库问答 >
问题:

在最多两次交易的限制下买卖股票的最佳时间

卢德惠
2023-03-14

网站提出的问题: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中的两个最大利润,其中max_profit1

我尝试了各种情况,并得到了理想的答案,但我面临的OJ提交错误。请帮我指出方法中的缺陷——希望在本案中避免DP。提前谢谢!

共有3个答案

颜嘉誉
2023-03-14

对于以下输入,这将失败:[1,2,4,2,5,7,2,4,9,0]

在这种情况下,答案应该是13。(第一天买入,第六天卖出,第七天买入,第九天卖出)。

但根据代码,它返回12。

耿联
2023-03-14

为什么要避免动态规划?

如果我们向后迭代,我们知道每个可能的买入的最佳卖出量——这是迄今为止看到的最大值。我们还可以记录和更新从我们所在的位置到结束的最佳交易。

如果我们反复向前看,我们知道每一次可能的卖出都是最佳买入——这是迄今为止看到的最小值。我们还可以记录和更新从现在开始的最佳交易。我们可以通过将我们现在的位置与我们已经为百思买记录的交易配对来更新整体解决方案,从索引i1到最后。

晋涛
2023-03-14

本地最小值和最大值可能不是最佳值,因为我们有2个可用交易。

您的代码有时使用错误的本地最小值/最大值

例如给定输入:

1 1 3 1 3 2 4

您的解决方案给出:4

正确的asnwer是:5

 类似资料:
  • 我了解用交易费购买和出售股票的最佳时间的解决方案,以及与股票出售相关的其他5个问题。我只想深入了解如何在问题中提出这种递归关系。 我读过https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/discuss/108870/most-consistent-ways-of-dealing-wi

  • 尝试解决这个问题:假设您有一个数组,其中第i个元素是给定股票在第i天的价格。 设计一个算法来寻找最大利润。您最多可以完成两笔交易。 解决方案:我正在做的是分而治之的方法。 dp[i][j]是ith和jth day之间的最大利润。计算如下: dp[i][j]=max(dp[i][j],max(prices[i]-prices[j],dp[k][j],dp[i][k1]),其中k小于i且大于j。 现在

  • 本文向大家介绍基于java计算买卖股票的最佳时机,包括了基于java计算买卖股票的最佳时机的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计的收入差 分析: 如果当前位置i的价格比i+1的价格高,则当前不是买

  • 给你n天的股票价格。通过股票交易获得最大利润。你每天最多只能交易一次:每天你可以选择购买一只股票,或者卖出一只股票(如果你有),或者放弃当天的交易,什么都不做。 给定,返回 解释: 你可以在第一天和第二天购买,在第三天和第四天出售。 利润:-1-2109=16 给定,返回 解释: 你可以在第二天买入,第四天卖出。 利润:-5 10=5 困难的部分是,你可以进行连续的买入和/或卖出,这意味着一旦你持

  • 有人给了我一个课本上的问题,我弄不懂。它是: 假设您有一只股票STOK,您打算将所有资金投资一个月(天),到月底您无法持有任何股票。您有钱。对于任何一天STOK的价格都是,并且在任何一天您都可以买卖股票。但是,您一天可以买卖多少股票是有限制的(买卖是一样的)。如果您愿意,您可以购买非整数单位的股票,以便于计算。鉴于这些功能,您如何安排购买计划以最大化您的利润? 天真的解决方案:每天在以下限制条件下

  • 有一个经典的面试问题,即利润最大化,允许一次交易、n次交易和k次交易购买股票。 有人问我一个类似的问题,但有一个扭曲的限制:你可以购买一只股票任意次数(任何一天不超过一个单位),但你不能在卖出股票后购买。 这有一个引理,你只卖一次。 例:70409011080100 选项1:B卖出=130 选项2:B X B卖出=120 老问题 https://www.geeksforgeeks.org/stoc