代码随想录二刷Day51
今日任务
309.最佳买卖股票时机含冷冻期
714.买卖股票的最佳时机含手续费
语言:Go
309. 最佳买卖股票时机含冷冻期
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/
还可以分成:
- 持有股票状态:买入状态
- 未持有股票状态
① 卖出当天状态
② 冷冻期当天状态
③ 冷冻期后的已卖出状态
func max(i, j int) int {
if i < j {
return j
} else {
return i
}
}
func maxProfit(prices []int) int {
//当前状态(分类标准有些混乱,不修改了,做一个提醒)
//0:未进行交易(任何交易都未进行的状态)
//1:买入(最后状态为买入,不一定是哪天买的)
//2:卖出(最后状态为卖出,早已卖出/当天卖出)
//3:冷冻期及冷冻期已过但还未买入的状态
dp := make([]int, 4)
dp[1] = -prices[0]
for i := 0; i < len(prices); i++ {
dp[1] = max(max(dp[1], dp[0] - prices[i]), dp[3] - prices[i])
dp[3] = dp[2]
dp[2] = max(dp[2], dp[1] + prices[i])
}
return max(max(dp[0], dp[1]), max(dp[2], dp[3]))
}
714. 买卖股票的最佳时机含手续费
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
func max(i, j int) int {
if i < j {
return j
} else {
return i
}
}
func maxProfit(prices []int, fee int) int {
//0:未进行任何交易的状态
//1:买入状态
//2:卖出状态,卖出的时候支付手续费
dp := make([]int, 3)
dp[1] = -prices[0]
dp[2] = -fee
for i := 1; i < len(prices); i++ {
dp[1] = max(dp[0] - prices[i], max(dp[1], dp[2] - prices[i]))
dp[2] = max(dp[1] + prices[i] - fee, dp[2])
}
return max(dp[0], max(dp[1], dp[2]))
}