带冷却期的股票买卖最佳时机 (C++)
假设我们有一个数组,其中第 i 个元素代表第 i 天某只股票的价格。我们需要设计一个算法来找到最大利润。我们可以进行任意多次交易(所以,可以多次买卖股票)。但是,我们必须遵守以下规则:
- 我们不能同时进行多笔交易(所以,必须先卖出股票才能再次买入)。
- 卖出股票后,第二天不能买入股票。(所以需要一天的冷却期)
如果输入是 [1,2,3,0,2],则输出为 3,序列为 [买入, 卖出, 冷却, 买入, 卖出]
为了解决这个问题,我们将遵循以下步骤:
- endWithSell := 0, endWithBuy := -∞, prevBuy := 0, prevSell := 0
- for i := 0 to 给定数组的大小
- prevBuy := endWithBuy
- endWithBuy := max(endWithBuy, prevSell – Arr[i])
- prevSell := endWithSell
- endWithSell := max(endWithSell, prevBuy + Arr[i])
- return 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
广告