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

代码随想录 动态规划||343 96

Day35

343. 整数拆分

力扣题目链接

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

思路

  • 动规逻辑

  • 确定dp数组(dp table)以及下标的含义

  • dp[i]指的是拆分数字i能得到的最大成绩dp[i]

  • 确定递推公式

  • 比如要拆分10,就要分析是2×8 3×7...这个可以通过一个循环解决,每次从2开始循环,拆分i,并不断更新dp[i]的最大值

  • dp数组如何初始化

  • dp[2] = 1是确定的,但dp[0]和dp[1]设置初始值为0就行,因为反正也不会从他们这里面选

  • 确定遍历顺序

  • dp[i]是从前面得来的,从前往后遍历

  • 举例推导dp数组

  • 5 -> 2 * 3; 8 -> 3 * (2 * 3); 10 -> 2 *(3* (2*3) )

  • 时间复杂度O(n2),空间复杂度O(n)

  • 贪心逻辑

  • 只要n还大于4,就把n分出来一个3,然后把res再和最后的n相乘

  • 时间复杂度O(n),空间复杂度O(1)

代码

class Solution {public int integerBreak(int n) {if (n == 1 || n == 2) return 1;if (n == 3) return 2;int res = 1;while (n > 4){n -= 3;res *= 3;}res *= n;return res;}
}class Solution {public int integerBreak(int n) {int[] dp = new int[n + 1];dp[2] = 1;//初始化for (int i = 3; i <= n; i++) {//外层计算dp[i]for (int j = 2; j <= i; j++) {//内层计算拆分的情况dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));//从后面两个中挑选,不断更新dp[i]最大值}}return dp[n];}
}

96.不同的二叉搜索树

力扣题目链接

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

思路

  • 确定dp数组(dp table)以及下标的含义

  • dp[i]是从1到i这些数字组成不同的二叉搜索树的个数

  • 确定递推公式

  • dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]

  • 1~3这三个元素组成的二叉搜索树个数,1为头节点+2为头节点+3为头节点

  • 1为头节点:左子树0个元素的二叉搜索树 * 右子树2个元素的二叉搜索树

  • ...

  • dp数组如何初始化

  • dp[0] = 1, dp[1] = 1

  • 确定遍历顺序

  • 从前往后

  • 举例推导dp数组

代码

class Solution {public int numTrees(int n) {int[] dp = new int[n + 1];dp[0] = 1;dp[1] = 1;//初始化dp数组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];}
}
http://www.lryc.cn/news/29034.html

相关文章:

  • Python---正则表达式
  • Unity入门精要02---纹理
  • 【Day1】一小时入门 python 基础,从安装到入门
  • 2D图像处理:相机标定
  • windows 下 python 和repo 下载安装环境变量配置
  • jsp进阶
  • 模块化CommonJS、AMD、CMD、ES6
  • Python GUI界面编程-初识
  • 【Servlet篇4】cookie和session
  • 考研流程,可以进来转一转(考研你不知道的事情)(详细版)
  • 3.2 LED闪烁流水灯蜂鸣器
  • 刷题笔记3 | 203. 移除链表元素、707设计链表,206.反转链表
  • [一篇读懂]C语言十一讲:单链表的删除和单链表真题实战
  • 【C++初阶】list的使用
  • HTML 布局
  • 如何在虚拟机中安装ikuai软路由系统
  • Java 多线程 --- 线程协作 wait/notify
  • 【PyTorch】教程:torch.nn.Hardsigmoid
  • 【手把手一起学习】(八) Altium Designer 20修改和自定义原理图标题栏
  • 业务流程测试
  • [极客大挑战 2019]EasySQL 1
  • vulnhub raven2复现
  • LeetCode 剑指 Offer II 079. 所有子集
  • 打印名片-课后程序(Python程序开发案例教程-黑马程序员编著-第二章-课后作业)
  • 为什么我们在判断字符串不为null后还要判断字符串长度大于0?
  • javaEE 初阶 — 应用层中的 DNS 协议(域名解析系统)
  • 【网络】-- 网络编程套接字(铺垫、预备)
  • 一文打通@SentinelResource
  • 苹果手机备份的文件在电脑什么地方 苹果备份文件怎么查看
  • 【MySQL速通篇001】5000字超详细介绍MySQL部分重要知识点