题目
题源与买卖股票的最佳时机 II极为类似。
代码
分析
dp[i][0]表示第i天,有股票。情况1,第i – 1天就有股票,第i天没卖。情况2,第i-1天没有股票,第i天新买的。
dp[i][1]表示第i天,没有股票。情况1,第i-1天就没有股票。第i-1天有股票,第i天给卖了。
class Solution {
public int maxProfit(int[] prices, int fee) {
int n = prices.length;
int[][] dp = new int[n][2];
dp[0][0] = -prices[0];
// 设卖出时候有手续费
for (int i = 1; i < n; i++) {
dp[i][0] = Math.max(dp[i - 1][0],dp[i - 1][1] - prices[i]);
dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);
}
return dp[n - 1][1];
}
}
优化:
class Solution {
public int maxProfit(int[] prices, int fee) {
int n = prices.length;
int f0 = -prices[0];
int f1 = 0;
// 设卖出时候有手续费
for (int i = 1; i < n; i++) {
int new0 = Math.max(f0,f1 - prices[i]);
int new1 = Math.max(f1, f0 + prices[i] - fee);
f0 = new0;
f1 = new1;
}
return f1;
}
}