【贪心算法】Leetcode 714. 买卖股票的最佳时机含手续费
题目
给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。
返回获得利润的最大值。
注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。
思路
- 贪心思想:每次收集正利润,然后累加起来就可以,遇到负利润就跳过
- 第一种情况,股票的价格小于之前买入点,那么更新最小价格
- 第二种情况:股票价格低于买入价格与手续费之和,那么直接跳过
- 第三种情况:股票价格大于买入价格与手续费之和,计算利润,然后累加,更新最低价格
代码
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
int result = 0;// 最后的利润
int minprice = prices[0];// 记录最小的价格
for(int i = 1; i < prices.size(); i++)
{
// 贪心思想:收集最大利润 只要每次收集正利润就可以
if(prices[i] < minprice)
{
// 更新最低买入点
minprice = prices[i];
}
if(prices[i] > minprice && prices[i] < minprice + fee)
{
// 不够成本
continue;
}
if(prices[i] > minprice + fee)
{
// 此时产生正利润
result += prices[i] - minprice - fee;// 收集正利润
// 更新买入点
minprice = prices[i] - fee;//因为本次卖出不一定是最大利润 所以为了防止多次减去手续费(手续费只要剪掉一次就可以)
}
}
return result;
}
};