当前位置: 首页 > news >正文

LeetCode算法题解(动态规划)|LeetCode343. 整数拆分、LeetCode96. 不同的二叉搜索树

一、LeetCode343. 整数拆分

题目链接:343. 整数拆分
题目描述:

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

提示:

  • 2 <= n <= 58
算法分析:
定义dp数组及下标含义:

dp[i]表述正整数i拆分成k个正整数乘积所能够得到的最大值。

递推公式:

用一个j来遍历从1到i,得到两个dp[i],即dp[i]=j*(i-j)(将整数i分成两个正整数j和i-j),和dp[i]=j*dp[i-j]。

所以dp[i] = max(dp[i],max(j*(i-j),j*dp[i-j]))。

初始化:

dp[0]和dp[1]初始化没有意义,所以我们初始化dp[2]=1(2拆分成两个1相乘)。

遍历顺序:

因为dp[2]已经初始化了,所以我们从3遍历到n。

代码如下:

class Solution {public int integerBreak(int n) {int[] dp = new int[n + 1];dp[2] = 1;//初始化for(int i = 3; i <= n; i++) {for(int j = 1; j < i; j++) {dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));}}return dp[n];}
}

时间复杂度o(n^2),空间复杂度o(n)。

二、LeetCode96. 不同的二叉搜索树

题目链接:96. 不同的二叉搜索树
题目描述:

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 19
算法分析:
定义dp数组及下标含义:

dp[i]表示i个节点组成的二叉搜索树的种树。

递推公式:

j从1遍历到i,当j为头节点时,左子树有i-1个节点,左子树的种类数相当于dp[j-1],右子树有i-j个节点,右子树的种类数相当于dp[i-j]。

所以dp[i]+=dp[j-1]*dp[i-j],j从1比那里遍历到i;

初始化:

dp[0]初始化为1(0的话会影响乘法结果),dp[1]初始化为1(一个节点的二叉搜索树只有一种情况)

遍历顺序:

i从2遍历到n,然后确定dp[i](dp[i]+=dp[j-1]*dp[i-j])。

如果结果有误打印dp数组检查验证。

代码如下:

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

时间复杂度o(n^2),空间复杂度o(n)

总结

这两道题还是比较难的,自己想很难有思路。

http://www.lryc.cn/news/240455.html

相关文章:

  • 好多年没更新了
  • DOM文档对象模型
  • 【Django-DRF】多年md笔记第5篇:Django-DRF的Request、Response和视图详解
  • mongo DB -- aggregate分组查询后字段展示
  • 禁止linux shell 终端显示完整工作路径,如何让linux bash终端不显示当前工作路径
  • error: ‘ui/ui_uimainwindow.h‘ file not found
  • 【高级网络程序设计】Week2-3 HTML
  • 来聊聊JVM中的类加载过程以及双亲委派模型(学习Java必知内容)
  • scala的类介绍
  • 1.Gin 介绍
  • 华三无线控制器WX2540H配合准入做Portal认证
  • OAK相机通过振动测试!
  • 使用Pytorch从零开始构建RNN
  • Linux之实现简易的shell
  • 如何实现在公网下使用navicat图形化工具远程连接本地内网的MariaDB数据库
  • MySQL InnoDB 引擎底层解析(三)
  • 浅析基于智能音视频技术的城市重要场馆智能监控系统设计
  • hdu-lcy算法培训班 入门第一讲 数学基础
  • 获取ip属地(ip2region本地离线包-超简单)
  • 主流的低代码平台有哪些?程序员应该如何与低代码相处?
  • 华为---OSPF网络虚连接(Virtual Link)简介及示例配置
  • Python函数式编程:让你的代码更优雅更简洁
  • 艺术作品3D虚拟云展厅能让客户远程身临其境地欣赏美
  • 负载均衡简介
  • 【高级网络程序设计】Week2-1 Sockets
  • quickapp_快应用_requestHeader
  • FPGA----ZCU106使用petalinux 2019.1的第一个app开发
  • 华为ac+fit漫游配置案例
  • Jenkins 配置节点交换内存
  • 二百零七、Flume——Flume实时采集5分钟频率的Kafka数据直接写入ODS层表的HDFS文件路径下