【刷题DAY40】343, 96.md

343. 整数拆分

题目链接:https://leetcode.cn/problems/integer-break/

0x1 看到题目的第一想法

0x2 自己实现过程中遇到哪些困难

  • dp[i]转移方程

0x3 今日学习的文章链接,或者视频链接

0x4 看完代码随想录之后的想法

  • dp[i] = max(dp[i], j*(i-j), j*dp[i-j], dp[j]*dp[i-j]) j从1开始遍历

0x5 今日收获,记录一下自己的学习时长

  • 1h

96. 不同的二叉搜索树

题目链接:https://leetcode.cn/problems/unique-binary-search-trees/

0x1 看到题目的第一想法

0x2 自己实现过程中遇到哪些困难

  • dp[i]转移方程

0x3 今日学习的文章链接,或者视频链接

0x4 看完代码随想录之后的想法

# dp[i] = 以1为头结点的二叉搜索树(i节点)个数f(1) + 以2为头结点的二叉搜索树个数f(2) + ... + 以i为头结点的二叉搜索树个数f(i)
# dp[i] = f(1) + f(2) + ... + f(i)
# 以1为头结点的二叉搜索树个数,左子树个数为0,右子树个数为i-1个, = dp[0]\*dp[i-1]
# 以i为头结点的二叉搜索树个数,左子树个数为i-1,右子树个数为0个, = dp[i-1]\*dp[0]
# 以j为头结点的二叉搜索树个数,左子树个数为j-1,右子树个数为i-j个, = dp[j-1]\*dp[i-j]
# 综上:dp[i] += dp[j-1]\*dp[i-j] j从1开始

0x5 今日收获,记录一下自己的学习时长

  • 1h

总结

  • 动态规划 5步法
    1
    2
    3
    4
    5
    # 1.定义dp数组,明确dp[m][n]的含义
    # 2.确定转移公式
    # 3.dp数组的初始化
    # 4.确定遍历顺序
    # 5.举例推导dp数组

    复习

  • day12
    • 滑动窗口最大值
      • 维护一个从大到小的队列
      • 窗口不会滑
    • 前 K 个高频元素
      • 统计频率
      • 维护一个大小为k的小根堆

待重点复习

343, 96, 239, 347