- 买卖股票的最佳时机含手续费
题目描述提示帮助提交记录社区讨论阅读解答
随机一题
给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。
返回获得利润的最大值。
dp思路:dp[0]代表手上没有支票 dp[1]代表手上有支票
dp[0]可能就是i之前就没有股票或者在i天卖出了股票。
dp[1]可能就是i之前就有股票或者在i天买进了股票。
转移方程就是:
dp[0]=max(dp[0],dp[1]+prices[i]-fee);
dp[1]=max(dp[1],dp[0]-prices[i]);
class Solution {
public int maxProfit(int[] prices,int fee) {
if(prices.length==0){
return 0;
}
int[] dp=new int[2];
dp[1]=-prices[0];
for(int i=0;i<prices.length;++i){
dp[0]=Math.max(dp[0],dp[1]+prices[i]-fee);
dp[1]=Math.max(dp[1],dp[0]-prices[i]);
}
return Math.max(dp[0],dp[1]);
}
}