309.最佳买卖股票时机含冷冻期
思路
一共三个状态 持有股票 未持有股票 冷冻期
dp:=make([]int,3)
持有股票只能从冷冻期购买
思路代码
func maxProfit(prices []int) int {
dp:=make([]int,3)
dp[0]=-prices[0]
for i:=1;i<len(prices);i++{
dp[0],dp[1],dp[2]=max(dp[0],dp[2]-prices[i]),max(dp[1],dp[0]+prices[i]),max(dp[1],dp[2])
}
return dp[1]
}
func max(i,j int)int{
if i<j{
return j
}
return i
}
官方题解
官方是四个状态
状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)
不持有股票状态,这里就有两种卖出股票状态
状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期。或者是前一天就是卖出股票状态,一直没操作)
状态三:今天卖出股票
状态四:今天为冷冻期状态,但冷冻期状态不可持续,只有一天!
714.买卖股票的最佳时机含手续费
思路
卖出股票的时候扣除手续费即可
dp[0],dp[1]=max(dp[0],dp[1]-prices[i]),max(dp[1],dp[0]+prices[i]-fee)
思路代码
func maxProfit(prices []int, fee int) int {
dp:=make([]int,2)
dp[0]=-prices[0]
for i:=1;i<len(prices);i++{
dp[0],dp[1]=max(dp[0],dp[1]-prices[i]),max(dp[1],dp[0]+prices[i]-fee)
}
return dp[1]
}
func max(i,j int)int{
if i<j{
return j
}
return i
}
今日收获
股票问题对于状态的设计
dp代表当天每个状态对应的最大值