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

提示

文章目录


一、整数拆分

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

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。

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

相关推荐
云析赢指标公式网43 小时前
文华WH6布林轨道均线强弱共振指标公式
前端·算法
多弗朗皮卡丘3 小时前
数据结构4:链表(下)
c语言·数据结构·链表
luj_17683 小时前
一线一区一变破解人盯人防守密码
开发语言·网络·c++·经验分享·算法
广州山泉婚姻3 小时前
C/C++动态内存:堆内存的申请、使用与释放
c++·人工智能
Wang's Blog3 小时前
Java框架快速入门: Spring Security+OAuth2之字段验证与自定义验证注解实战
java·算法·spring
带多刺的玫瑰3 小时前
Leecode#29刷题之两数相除
java·python·算法
smj2302_796826523 小时前
解决leetcode第4017题数组中的峰值II
python·算法·leetcode
午彦琳3 小时前
2026.9.9
数据结构·算法·leetcode
luj_17684 小时前
中锋卡位与开放线博弈
c语言·开发语言·网络·经验分享·算法
Jackson_GJH4 小时前
日志_图解spdlog
开发语言·c++