代码随想录算法训练营Day40 | LeetCode343. 整数拆分、LeetCode96.不同的二叉搜索树

LeetCode343. 整数拆分

这道题如果用数学证明的方法,利用贪心的策略,将数全部拆成3,有余数×4,即可得到最大值,但需要数学证明。

本题用动态规划的思想第一层for循环从小到大遍历数组,dp[i]即为第i个数拆分之后的最大值。第二层for循环,负责拆分数,j控制每次拆出来的数大小,最后取最大值。

动态规划五部曲:dp数组含义;递推公式;初始化;遍历顺序;打印dp数组,本题递推公式比较难想。

代码如下:时间复杂度O(n^2);空间复杂度有O(n)

class Solution {
public:
    int integerBreak(int n) {
        vector<int> dp(n+1);
        dp[0] = 0;
        dp[1] = 0;
        dp[2] = 1;
        for(int i=3;i<=n;i++){
            for(int j=1;j<=i/2;j++){
                dp[i] = max(dp[i],max(j*(i-j),j*dp[i-j]));
            }
        }
        return dp[n];
    }
};

LeetCode96.不同的二叉搜索树

本题思路比较难想,以输入为3分析规律,dp[3]等于头节点为1的树+头节点为2的树+头节点为3的树,那么当确定了头节点时,剩下的左右子树好像和dp[0,1,2]有关系,排列组合可以直接得到,因此可以用动态规划的思想。

递归五部曲:
1、dp[i]数组的含义,为个数;
2、递推公式:确定了头节点后左右子树结果乘积;
3、初始化,本题只初始化dp[0]即可,因为一颗空树也是一颗二叉搜索树,注意这里如果初始化到dp[2]=2,那么在创建数组的时候必须创建大小为n+2的数组,如果小于n+2时,此时输入为1会出现数组溢出。int数组默认初始化为0。
4、遍历顺序:从前往后;
5、打印dp数组。

代码如下:时间复杂度O(n^2);空间复杂度O(n)

class Solution {
public:
    int numTrees(int n) {
        vector<int> dp(n+1,0);
        dp[0] = 1;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                dp[i] += dp[i-j]*dp[j-1];
            }
        }
        return dp[n];
    }
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-09 23:12:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-09 23:12:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-09 23:12:08       82 阅读
  4. Python语言-面向对象

    2024-03-09 23:12:08       91 阅读

热门阅读

  1. 企业强化加密安全防护的关键措施与实施路径

    2024-03-09 23:12:08       43 阅读
  2. 多级透明分流系统(服务端缓存)

    2024-03-09 23:12:08       44 阅读
  3. MySQL 添加主键可以节省磁盘空间吗?

    2024-03-09 23:12:08       47 阅读
  4. ADB(Android Debug Bridge)详细下载安装及使用教程

    2024-03-09 23:12:08       179 阅读
  5. 常用GIT命令

    2024-03-09 23:12:08       39 阅读
  6. [SAP] MM模块简介

    2024-03-09 23:12:08       57 阅读
  7. mysql笔记:7. 索引

    2024-03-09 23:12:08       42 阅读
  8. 【Linux】Docker安装

    2024-03-09 23:12:08       43 阅读
  9. 蓝桥杯(3.6)

    2024-03-09 23:12:08       41 阅读
  10. springboot项目docker分层构建

    2024-03-09 23:12:08       43 阅读
  11. Pytorch_1_基本语法

    2024-03-09 23:12:08       42 阅读
  12. 走进云原生:微服务技术的崭新篇章

    2024-03-09 23:12:08       43 阅读
  13. 文心一言 VS ChatGPT-4

    2024-03-09 23:12:08       45 阅读