代码随想录算法训练营第四十一天|343. 整数拆分、96.不同的二叉搜索树

提示

文章目录


一、整数拆分

对整数进行拆分,有两种方法得到dp[i],一种是j * (i-j),另外一种是j * dp[i-j],第二种方法相当于再次将i-j拆分,所以dp[i]需要取两者的最大值,同时j也是从1开始拆分的,i里面有小循环j,所以也要比较dp[i],取最大值。

cpp 复制代码
class Solution {
public:
    int integerBreak(int n) {
        //1.确定dp数组和下标含义
        vector<int>dp(n+1);

        //2.确定递推公式

        //3.dp初始化
        dp[2] = 1;

        //4.遍历顺序
        for (int i = 3; i <= n; i++) {
            for (int j = 1; j <= i/2; j++) {
                dp[i] = max (dp[i], max(dp[i-j] * j, (i-j) * j));
            }
        }
        return dp[n];
    }
};

二、不同的二叉搜索树

有点难理解,主要还是找递推关系,建立递推公式

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

总结

欠的补完了,之后再忙也要抽出时间多看多写

学习时间90min。

学习资料:《代码随想录》

相关推荐
学涯乐码堂主7 小时前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
切糕师学AI7 小时前
环形缓冲区(Ring Buffer / Circular Buffer)详解:原理、优势、应用与高性能实现
数据结构·环形缓冲区
Tutankaaa8 小时前
知识竞赛题库设计全攻略
人工智能·算法
云栖梦泽8 小时前
Linux内核与驱动:14.SPI子系统
linux·运维·服务器·c++
WolfGang0073218 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
Gary Studio8 小时前
安卓HAL C++基础-智能指针
开发语言·c++
还是阿落呀8 小时前
基本控制结构2
c++
多思考少编码9 小时前
PAT甲级真题1001 - 1005题详细题解(C++)(个人题解)
c++·python·最短路·pat·算法竞赛
极客智造10 小时前
C++ 标准 IO 流全详解:cin /cout/get /getline 原理、用法、区别与避坑
c++·io
charlie11451419110 小时前
嵌入式C++工程实践第20篇:GPIO 输入模式内部电路 —— 芯片是如何“听“到外部信号的
开发语言·c++·stm32·单片机