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

news/2024/11/29 3:45:05/

目录

LeeCode 343. 整数拆分

动态规划法

贪心解法

LeeCode 96.不同的二叉搜索树


LeeCode 343. 整数拆分

343. 整数拆分 - 力扣(LeetCode)

动态规划法

思路

1.确定dp数组及下标含义:dp[i]:分拆数字i,可得到的最大乘积。

2.确定递推公式:dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j});

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((i - j) * j, dp[i - j] * j));}
} 

5.举例递推dp数组

代码

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

         时间复杂度:O(n²)                                            空间复杂度:O(n) 

贪心解法

思路:每次拆成n个3,如果剩下是4,则保留4,然后相乘。

class Solution {
public:int integerBreak(int n) {if (n == 2) return 1;if (n == 3) return 2;if (n == 4) return 4;int result = 1;while (n >4) {result *= 3;n -= 3;}result *= n;return result;}
};

          时间复杂度:O(n)                                            空间复杂度:O(1)


LeeCode 96.不同的二叉搜索树

96. 不同的二叉搜索树 - 力扣(LeetCode)

思路

1.确定dp数组及下标含义:dp[i]:1到i为节点组成的二叉搜索树的个数;

2.确定递推公式:dp[i] += dp[j - 1] * dp[i - j]; 

3.dp数组如何初始化:dp[0] = 1;

4.确定遍历顺序:遍历 i 里面每一个数作为头结点的状态,用 j 来遍历;

for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {dp[i] += dp[j - 1] * dp[i - j];}
}

5.举例递推dp数组

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];}
};

         时间复杂度:O(n²)                                            空间复杂度:O(n)  


http://www.ppmy.cn/news/109695.html

相关文章

git使用X篇_1_SVN和GIT的版本控制区别及git等的使用方法

GIT是分布式版本控制系统&#xff0c;可以在本地记录代码的修改过程而不一定上传至SVN服务端&#xff1a; 详细使用差异见博客&#xff1a; 版本控制&#xff1a;SVN和GIT的一些使用感受 版本控制&#xff1a;SVN和GIT的一些使用感受&#xff08;续&#xff09; git/svn_SVN和G…

Centos6.5环境Nginx 1.16.1升级到1.24.0版本

一、背景 2023年4月11日&#xff0c;官方发布了Nginx最新稳定版&#xff0c;版本号为 1.24.0。该版本是基于1.23.x&#xff08;1.23.0 - 1.23.4&#xff09;开发版的Bug修复&#xff0c;以及一些新特性的加入&#xff0c;而形成的稳定版。安全部门扫描后&#xff0c;发现现场不…

二分查找三道题

二分查找 两种写法&#xff1a;左闭右闭[left,right]、左闭右开[left,right) 主要有几点不同&#xff1a;1. right是从num.length开始还是从num.length-1开始。2.left<还是<right。3.rightmid还是mid1 左闭右闭写法&#xff1a; public int search(int[] nums, int targ…

网络攻防技术--论文阅读--《基于自动数据分割和注意力LSTM-CNN的准周期时间序列异常检测》

英文题目&#xff1a;Anomaly Detection in Quasi-Periodic Time Series based on Automatic Data Segmentation and Attentional LSTM-CNN 论文地址&#xff1a;Anomaly Detection in Quasi-Periodic Time Series Based on Automatic Data Segmentation and Attentional LST…

分享一块很有意思的C代码(五),谈谈static变量在裸机轮询系统中的用法【原创】

文章目录 静态局部变量静态全局变量、静态局部变量、全局变量、局部变量区别谈谈static变量在裸机轮询系统中的用法如何用static局部变量实现非static全局变量的功能?错误方式静态局部变量 (1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变…

【C++入门】什么是引用

目录 一、引用概念 二、引用特性 三、常引用 四、使用场景 1. 做参数 2. 做返回值 五、传值&#xff0c;传引用效率比较 六、引用和指针的区别 一、引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取一个别名&#xff0c;编译器不会为引用变量开辟内存空间…

C++ 常用算数生成算法

&#x1f914;常用算数生成算法&#xff1a; 该算法函数需要调用<numeric>头文件 1.accumulate 计算总和 在 C STL 中&#xff0c;accumulate() 是一种常用的算法&#xff0c;用于计算指定范围内的元素之和。 accumulate() 的函数原型为&#xff1a; template<c…

设计模式之~工厂系列

目录 简单工厂模式 工厂方法模式 简单工厂 VS 工厂方法 抽象工厂模式&#xff1a; 拓展&#xff1a; 利用简单工厂模式优化抽象工厂 利用反射抽象工厂 进行优化 反射配置文件抽象工厂进行优化 简单工厂模式 优点&#xff1a;简单工厂模式的最大优点在于工厂类包含…