golang力扣leetcode 309.最佳买卖股票时机含冷冻期

简介: golang力扣leetcode 309.最佳买卖股票时机含冷冻期

309.最佳买卖股票时机含冷冻期

309.最佳买卖股票时机含冷冻期

题解

题目:一次操作可以买股票,卖股票,啥都不干,在卖股票的下一天是冷冻期,不能买股票,求最大利润

思路:dp

State: dp[i][0]持股     时的最大利润
    dp[i][1]不持股 时的最大利润
    dp[i][2]冷冻期  时的最大利润
Function:
  //持股的状态转移:【上一次持股,这次啥都不干】,或者【冷冻期之后买入本次的股票】
  dp[i][0] = max(dp[i-1][0], dp[i-1][2]-prices[i])
  //不持股的状态转移:【上一次持股,这一次卖出】,不能啥都不干,因为定义是不持股
  dp[i][1] = dp[i-1][0] + prices[i]
  //冷冻期的状态专业:【上一次卖出,即不持股】,或者【上一次冷冻期,本次啥都不干】
  dp[i][2] = max(dp[i-1][1], dp[i-1][2])
Intialization:
  dp[0][0] = -prices[0]
  dp[0][1] = 0
  dp[0][2] = 0
Answer:
  max(dp[n-1][1], dp[n-1][2])

代码

func maxProfit(prices []int) (ans int) {
  n := len(prices)
  dp := make([][3]int, n)
  //dp[i][0]持股
  //dp[i][1]不持股
  //dp[i][2]冷冻期
  dp[0][0] = -prices[0]
  for i := 1; i < n; i++ {
    dp[i][0] = max(dp[i-1][0], dp[i-1][2]-prices[i])
    dp[i][1] = dp[i-1][0] + prices[i]
    dp[i][2] = max(dp[i-1][1], dp[i-1][2])
  }
  return max(dp[n-1][1], dp[n-1][2])
}
func max(i, j int) int {
  if i > j {
    return i
  }
  return j
}
目录
相关文章
|
5月前
|
算法 Python
【Leetcode刷题Python】309. 最佳买卖股票时机含冷冻期
解决LeetCode上309题“最佳买卖股票时机含冷冻期”的Python代码示例,利用动态规划方法计算在含有冷冻期约束下的最大利润。
47 1
|
3月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
3月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
107 0
|
3月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
35 0
|
3月前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
64 0
|
5月前
|
算法 Python
【Leetcode刷题Python】121. 买卖股票的最佳时机
解决LeetCode上121题“买卖股票的最佳时机”的Python代码示例,采用一次遍历的方式寻找最佳买卖时机以获得最大利润。
67 1
|
5月前
|
算法
leetcode188 买卖股票的最佳时机IV
leetcode188 买卖股票的最佳时机IV
73 0
|
5月前
|
算法 Python
【Leetcode刷题Python】714. 买卖股票的最佳时机含手续费
提供了两种解决买卖股票最佳时机含手续费问题的Python实现方法:贪心算法和动态规划算法。
53 0
|
5月前
|
算法 Python
【Leetcode刷题Python】122.买卖股票的最佳时机 II
LeetCode "买卖股票的最佳时机 II" 问题的Python代码实现,采用贪心算法在股票价格上升的每一天买入并卖出,以获得最大利润。
29 0
|
6月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
45 0