题目原址
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/description/
题目描述
给定一个数组和一个变量,其中数组中的元素表示当天的股票价格,变量表示每次交易需要支付的固定费用。不限制股票的购买和售出的次数,但是要求在购买新的股票之前要将手中的股票全部售出。
解题思路
- 分析题目,可以知道,主要就是考察股票的售出和购入问题。所以定义两个变量,ret和hold。ret用来表示第i天出售股票后的最大利润,hold表示保存第i天持有股票的最大利润。
- ret有两个状态:一个是保持第i天前一天的售出利润,另一个是售出第i天后的利润,ret选择其中的最大利润
- hold有两个状态:一个是在第i天购入的利润,另一个是第i天不购入的利润,选择其中的最大利润
- 这个题是一个dp问题,所以只要考虑当前天与前一天的关系即可。
AC代码
class Solution {
public int maxProfit(int[] prices, int fee) {
int ret = 0;
int n = prices.length;
if(n < 2)
return ret;
//hold保存当天持有股票的情况下的最大利润
int hold = -prices[0];
for(int i = 1; i < prices.length; i++) {
//temp是当天售出后的最大利润
int temp = ret;
ret = Math.max(temp, hold + prices[i] - fee);
hold = Math.max(hold, temp - prices[i]);
}
return ret;
}
}
参考
https://blog.youkuaiyun.com/koala_tree/article/details/78530510