一、题目
二、代码
class Solution
{
public:
//核心:解决持续收益问题
//但其实没有特别严谨的逻辑可言
int maxProfit(vector<int>& prices, int fee)
{
int i,j;
int return_num=0;
int min_prize=prices[0];
for(i=0;i<prices.size();i++)
{
if(prices[i]<min_prize) min_prize=prices[i];
if(prices[i]>min_prize+fee)
{
return_num+=prices[i]-min_prize-fee; //收获金钱
//下面这一句具体解释
// 如果下一个值大于 prices[i] 代表可以继续获得收益 免去手续费(实质上是把卖出节点向后延伸)
// 如果下一个值小于 prices[i] 大于prices[i]-fee 这个节点没有操作的必要 比如 1 7 5 8 fee=3
// 举例: 1买入 7卖出后 5没必要买入,因为5的买入会使得下一个卖出节点起码为9 而实际上8是可以的(7只是虚拟的卖出)
// 如果下一个值小于 prices[i]-fee 可以更新最低价格
min_prize=prices[i]-fee;
}
}
return return_num;
}
};