我之前做过好像类似的,我第一想法就是用到了散点。其实和之前的122几乎差不多但是增加手续费的操作。很多人都去使用dp去做。但是好像直接可以去使用贪心去做。
就是一个贪婪的过程。每一步去的最好的。这个我用题目给的数据去进行解释:
1 3 2 8 4 7
每一次的费用2元
在1买上来,我们可以在3去卖掉,但是此时费力不讨好。我们可以不去选择。现在再去王后面去转,发现8可以去卖掉。此时再去收取4,在7的时候去卖掉。
我们去实行的策略如下:最低价买入,最高价卖出,但是如果此时(收入-fee)<=0,那么完全不需要卖出,那么没有收入不盈不亏都是没必要,因为吃力不讨好。
代码如下:
class Solution {
public:
int ans=0;
int maxProfit(vector<int>& prices, int fee) {
if(prices.size()<2) return 0;
int hands=prices[0];
for(int i=1;i<prices.size();i++){
//如果当前手里的钱都小于后面的钱了
if(hands>prices[i]) hands=prices[i];
else if(hands+fee<prices[i]){
ans+=((prices[i]-hands)-fee);
hands=prices[i]-fee;
}
}
return ans;
}
};