714. 买卖股票的最佳时机含手续费
给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。
返回获得利润的最大值。
解题思路: 此题较之之前的股票交易题,增加了手续费。解此题采用动态规划解。
sold[i]表示第i天卖掉股票此时最大利润,hold[i]表示第i天保留手中股票最大利润。
s
o
l
d
[
i
]
=
m
a
x
(
s
o
l
d
[
i
−
1
]
,
h
o
l
d
[
i
−
1
]
+
p
r
i
c
e
s
[
i
]
−
f
e
e
)
;
sold[i] = max(sold[i - 1], hold[i - 1] + prices[i] - fee);
sold[i]=max(sold[i−1],hold[i−1]+prices[i]−fee);
h
o
l
d
[
i
]
=
m
a
x
(
h
o
l
d
[
i
−
1
]
,
s
o
l
d
[
i
−
1
]
−
p
r
i
c
e
s
[
i
]
)
;
hold[i] = max(hold[i - 1], sold[i - 1] - prices[i]);
hold[i]=max(hold[i−1],sold[i−1]−prices[i]);
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
int n = prices.size();
vector<int> sold(n, 0), hold(n, 0);
hold[0] = -prices[0];
for (int i = 1; i < prices.size(); ++i) {
sold[i] = max(sold[i - 1], hold[i - 1] + prices[i] - fee);
hold[i] = max(hold[i - 1], sold[i - 1] - prices[i]);
}
return sold[n - 1];
}
};