代码随想录算法训练营第四十一天|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。

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

相关推荐
许长安14 分钟前
c/c++ static关键字详解
c语言·c++·经验分享·笔记
Murphy_lx34 分钟前
C++ thread类
开发语言·c++
月夜的风吹雨34 分钟前
【C++ STL 深度剖析】:vector 底层模拟实现与核心陷阱解析
c++·vector·类和对象·visual studio
彩妙不是菜喵42 分钟前
C++ 中 nullptr 的使用与实践:从陷阱到最佳实践
开发语言·jvm·c++
蒙奇D索大1 小时前
【算法】递归的艺术:从本质思想到递归树,深入剖析算法的性能权衡
经验分享·笔记·算法·改行学it
逐步前行1 小时前
C数据结构--排序算法
c语言·数据结构·排序算法
王哈哈^_^1 小时前
【数据集+完整源码】水稻病害数据集,yolov8水稻病害检测数据集 6715 张,目标检测水稻识别算法实战训推教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
light_in_hand1 小时前
内存区域划分——垃圾回收
java·jvm·算法
小安同学iter2 小时前
SQL50+Hot100系列(11.7)
java·算法·leetcode·hot100·sql50
_dindong2 小时前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表