代码随想录-刷题第四十一天

343. 整数拆分

题目链接:343. 整数拆分

思路:动态规划五步曲

  1. dp[i]:拆分数字i,可以得到的最大乘积为dp[i]。

  2. 递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j))

    从1遍历j,有两种渠道得到dp[i]:

    一个是j * (i - j) 直接相乘。

    一个是j * dp[i - j],相当于是拆分(i - j),对这个拆分不理解的话,可以回想dp数组的定义。

    j怎么就不拆分呢?

    j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了。

  3. 初始化:从2开始,dp[2] = 1

    题目提示:2 <= n <= 58

  4. 遍历顺序:i和j都是从前向后遍历

  5. 举例推导dp数组

    当n为 10 的时候,dp数组里的数值,如下:

    343.整数拆分

class Solution {public int integerBreak(int n) {// dp[i]:拆分数字i,可以得到的最大乘积为dp[i]。int[] dp = new int[n + 1];// 递推公式:j从1开始遍历,每次取j*(i - 1)和j*dp[i - j]中最大的// j * (i - j) 是单纯的把整数 i 拆分为两个数 i 和 i-j ,再相乘// 而j * dp[i - j]是将 i 拆分成两个以及两个以上的个数,再相乘。// 初始化:从2开始,dp[2] = 1dp[2] = 1;// 遍历顺序:i和j都是从前向后遍历for (int i = 3; i <= n; i++) {for (int j = 1; j <= i / 2; j++) {// 遇到大的便更新dp[i],dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));}}return dp[n];}
}

因为拆分一个数n 使之乘积最大,那么一定是拆分成m个近似相同的子数相乘才是最大的。只不过我们不知道m究竟是多少而已,但可以明确的是m一定大于等于2,既然m大于等于2,也就是最差也应该是拆成两个相同的数,相乘之后可能是最大值。那么 j 遍历,只需要遍历到 n/2 就可以,后面就没有必要遍历了,一定不是最大值。

另一方面,枚举j的时候,是从1开始的。从0开始的话,那么让拆分一个数拆个0,求最大乘积就没有意义了。


96. 不同的二叉搜索树

题目连接:96. 不同的二叉搜索树

思路:动态规划五步曲(本题递推公式推导较为复杂,详情见代码随想录网站)

  1. dp[i]:i个不同元素节点组成的二叉搜索树的个数为dp[i]

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

    j 相当于是头结点的元素,从 1 遍历到 i 为止。

    j-1 为 j 为头结点左子树节点数量,i-j 为以 j 为头结点右子树节点数量

  3. 初始化:dp[0] = 1

    只需要初始化dp[0]就可以了,推导的基础,都是dp[0]。

  4. 遍历顺序是 i 从 1 到 n ,j 从 1 到 i 。

    那么遍历 i 里面每一个数作为头结点的状态,用 j 来遍历 i 。

  5. 举例推导dp数组

    n为5时候的dp数组状态如图:

    96.不同的二叉搜索树3

    基本举例到n为3就可以了,n为4的时候,画图已经比较麻烦了。

class Solution {public int numTrees(int n) {// i个不同元素节点组成的二叉搜索树的个数为dp[i]int[] dp = new int[n + 1];// 递推公式:dp[i] += dp[j - 1] * dp[i - j]// 初始化:dp[0] = 1dp[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];}
}

也可以用定义递归函数的方法解决本题,代码如下:

class Solution {// 存在重叠子问题,可以通过备忘录的方式消除冗余计算。int[][] memo;/* 主函数 */public int numTrees(int n) {// 备忘录的值初始化为 0memo = new int[n + 1][n + 1];return count(1, n);}/* 计算闭区间 [lo, hi] 组成的 BST 个数 */int count(int lo, int hi) {// base caseif (lo > hi) return 1;// 查备忘录if (memo[lo][hi] != 0) {return memo[lo][hi];}int res = 0;for (int mid = lo; mid <= hi; mid++) {// mid 的值作为根节点 rootint left = count(lo, mid - 1);int right = count(mid + 1, hi);// 左右子树的组合数乘积是 BST 的总数res += left * right;}// 将结果存入备忘录memo[lo][hi] = res;return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2661170.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

媲美保时捷:小米汽车正式亮相| 一周 IT资讯

1、对标保时捷、特斯拉&#xff01;小米汽车首款产品发布 12月28日&#xff0c;万众瞩目之下&#xff0c;小米汽车首场技术发布会终于揭开神秘面纱&#xff0c;来自全国各地的米粉齐聚北京&#xff0c;共同见证了小米汽车的技术特色及优势。 在本次发布会上&#xff0c;小米汽…

数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)

目录 1、概述 2、环境准备 3、读写分离实验 3.1、安装jdk 3.2、安装Mycat 3.3、配置Mycat 3.3.1、配置schema.xml ​​​​3.3.2、配置server.xml 3.4、修改主从机远程登陆权限 3.4.1、主机 3.4.2、从机 3.5、启动Mycat 3.6、登录Mycat 3.7、验证 1、概述 读写分…

【HarmonyOS开发】案例-记账本开发

OpenHarmony最近一段时间&#xff0c;简直火的一塌糊度&#xff0c;学习OpenHarmony相关的技术栈也有一段时间了&#xff0c;做个记账本小应用&#xff0c;将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件&#xff08;Button、Select、Text、Span、Divider、Image&am…

TikTok真题第8天 | 418.屏幕可显示句子的数量、395.至少有K个重复字符的最长子串、1010.总持续时间可以被60整除的歌曲对

418.屏幕可显示句子的数量 题目链接&#xff1a;418.sentence-screen-fitting 解法&#xff1a; 这道题&#xff0c;看题解都很难看懂&#xff0c;哪怕看出点门道了&#xff0c;也很难用自己的话解释出来。 有几点必须清楚&#xff1a; &#xff08;1&#xff09;将字符串…

10. Opencv检测并截取图中二维码

1. 说明 在二维码扫描功能开发中,使用相机扫描图片时,往往图片中的信息比较多样,可能会造成二维码检测失败的问题。一种提高检测精度的方式就是把二维码在图片中单独抠出来,去除其它冗余信息,然后再去识别这张提取出来的二维码。本篇博客记录采用的一种实现二维码位置检测…

计算机网络——应用层与网络安全(六)

前言&#xff1a; 前几章我们已经对TCP/IP协议的下四层已经有了一个简单的认识与了解&#xff0c;下面让我们对它的最顶层&#xff0c;应用层进行一个简单的学习与认识&#xff0c;由于计算机网络多样的连接形式、不均匀的终端分布&#xff0c;以及网络的开放性和互联性等特征&…

L1-069:胎压监测

题目描述 小轿车中有一个系统随时监测四个车轮的胎压&#xff0c;如果四轮胎压不是很平衡&#xff0c;则可能对行车造成严重的影响。 让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序&#xff0c;随时监测四轮的…

GaussDB数据库中的同义词SYNONYM

目录 一、前言 二、GasussDB数据库中的Synonym 1、Synonym的概念 2、语法介绍 3、Synonym的用途 三、Synonym在GaussDB数据库中是如何使用的 1、表的同义词使用&#xff08;示例&#xff09; 2、视图的同义词使用&#xff08;示例&#xff09; 3、函数的同义词使用&am…

分布式IO在工业自动化中的应用

传统的自动化产线及物流系统主要是利用PLC来处理数据&#xff0c;并将这些数据保存在PC当中。但是随着互联网技术的迅速发展&#xff0c;越来越多的系统集成商利用分布式IO模块&#xff0c;实现从控制器到自动化最底层之间的IO通信。 分布式IO在工业自动化中的应用 分布式IO是用…

Vue3+ElementPlus: 给点击按钮添加触发提示

一、需求 在Vue3项目中&#xff0c;有一个下载按钮&#xff0c;当鼠标悬浮在按钮上面时&#xff0c;会出现文字提示用户可以点击按钮进行数据的下载技术栈 Vue3 ElementPlusTooltip组件 ElementPlus中的Tooltip组件 &#xff0c;可用于展示鼠标 hover 时的提示信息 二、实现…

【SD】IP-Adapter 进阶 - 垫图 【1】

目录 关于SD1.5的画风迁移 修改动作-方法一&#xff1a;提示词 修改动作-方法二&#xff1a;openpose 关于SD1.5的画风迁移 1.5测试模型&#xff1a;flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 测试图&#xff1a; 文生图&#xff1a;best quality,masterpiece, co…

GPT-5、开源、更强的ChatGPT!

年终岁尾&#xff0c;正值圣诞节热闹气氛的OpenAI写下了2024年的发展清单。 OpenAI联合创始人兼首席执行官Sam Altman在社交平台公布&#xff0c;AGI&#xff08;稍晚一些&#xff09;、GPT-5、更好的语音模型、更高的费率限制&#xff1b; 更好的GPTs&#xff1b;更好的推理…

weblogic未授权命令执行漏洞(CVE-2020-14882)

漏洞描述&#xff1a; 未经身份验证的远程攻击者可能通过构造特殊的 HTTP GET请求&#xff0c;利用该漏洞在受影响的 weblogic Server 上执行任意代码。 复现过程&#xff1a; 1.访问ip&#xff1a;port/console 2.poc构造 #!/usr/bin/env python3 # -*- coding: utf-8 -*-…

春款来啦~我先冲了

这款假两件设计的连帽风衣外套 宽松版型对身材包容性很强&#xff0c;韩系慵懒风颜色很舒服 时尚百搭怎么穿都好看系列 做了腰部可调节抽绳&#xff0c;想要修身一点的可以自己调节哈 袖口处也做了金属按扣调节&#xff0c;防风保暖 这件风衣也很好搭配&#xff0c;很经典…

css原子化的框架Tailwindcss的使用教程(原始html和vue项目的安装与配置)

安装教程 中文官网教程 原始的HTML里面使用 新建文件夹npm init -y 初始化项目 安装相关依赖 npm install -D tailwindcss postcss-cli autoprefixer初始化两个文件 npx tailwindcss init -p根目录下新建src/style.css tailwind base; tailwind components; tailwind ut…

利用Jmeter做接口测试(功能测试)全流程分析!

利用Jmeter做接口测试怎么做呢&#xff1f;过程真的是超级简单。 明白了原理以后&#xff0c;把零碎的知识点填充进去就可以了。所以在学习的过程中&#xff0c;不管学什么&#xff0c;我一直都强调的是要循序渐进&#xff0c;和明白原理和逻辑。这篇文章就来介绍一下如何利用…

【数据结构】图论与并查集

一、并查集 1.原理 简单的讲并查集&#xff0c;就是查询两个个元素&#xff0c;是否在一个集合当中&#xff0c;这里的集合用树的形式进行表示。并查集的本质就是森林, 即多棵树。 我们再来简单的举个例子: 假设此时的你是大一新生&#xff0c;刚进入大学&#xff0c;肯定是…

什么是骨传导耳机?骨传导能保护听力吗?

骨传导耳机是一种非常特殊的蓝牙耳机&#xff0c;它通过骨传导技术将声音直接传送到内耳。这种技术不同于传统耳机&#xff0c;它不通过空气传送声音&#xff0c;而是通过头骨的振动来传送声音。 并且骨传导耳机能够在一定程度上起到保护听力的作用&#xff0c;主要是因为它们不…

Oracle中null值和空字符串的坑

思考 今天在学习oracle数据库的过程中&#xff0c;发现当对字段进行约束&#xff0c;默认空字符串时&#xff0c;出现报错 --创建employees表 CREATE TABLE employees (id NUMBER,name VARCHAR2(100) ); --对表新增email列&#xff0c;添加约束默认空字符串并且非空 ALTER …

山景32位蓝牙DSP音频应用处理芯片—BP1048B2

由工采网代理的BP1048B2是山景推出的一款高性能32位DSP蓝牙音频应用处理器&#xff1b;该芯片拥有32位RISC内核&#xff0c;支持DSP指令&#xff0c;集成FPU支持浮点运算&#xff0c;可应用于蓝牙K歌宝、蓝牙便携式音箱、蓝牙拖箱、蓝牙SoundBar、包头式蓝牙耳机、各类蓝牙音频…