使用C ++进行冷却的最佳买卖股票时间

假设我们有一个数组,第i个元素是第i天给定股票的价格。我们必须设计一种算法来找到最大的利润。我们可以根据需要完成尽可能多的交易(因此,要购买一股并多次出售一股股票)。但是我们必须遵循这些规则-

  • 我们可能不会同时进行多项交易(因此,在您再次购买之前,我们必须出售股票)。

  • 出售股票后,第二天就不能购买股票。(所以冷静1天)

如果输入类似于[1,2,3,0,2],则输出将为3,序列类似于[买,卖,冷却,买,卖]

为了解决这个问题,我们将遵循以下步骤-

  • endWithSell:= 0,endWithBuy:= -ve无限,prevBuy:= 0和prevSell:= 0

  • 对于i:= 0到给定数组的大小

    • prevBuy:= endWithBuy

    • endWithBuy:= endWithBuy和prevSell的最大值– Arr [i]

    • prevSell:= endWithSell

    • endWithSell:= endWithSell和prevBuy + Arr [i]的最大值

  • 返回endWithSell

让我们看下面的实现以更好地理解-

示例

#include <bits/stdc++.h>

using namespace std;

class Solution {

   public:

   int maxProfit(vector<int>& p) {

      int endWithSell = 0;

      int endWithBuy = INT_MIN;

      int prevBuy =0, prevSell = 0;

      for(int i =0;i<p.size();i++){

         prevBuy = endWithBuy;

         endWithBuy = max(endWithBuy,prevSell - p[i]);

         prevSell = endWithSell;

         endWithSell = max(endWithSell, prevBuy + p[i]);

      }

      return endWithSell;

   }

};

main(){

   Solution ob;

   vector<int> v = {1,2,3,0,2};

   cout << (ob.maxProfit(v));

}

输入值

[1,2,3,0,2]

输出结果

3

以上是 使用C ++进行冷却的最佳买卖股票时间 的全部内容, 来源链接: utcz.com/z/316375.html

回到顶部