算法刷题打卡035 | 动态规划3

LeetCode 343 整数拆分

题目链接:343. 整数拆分 - 力扣(Leetcode)

 将整数拆分,使得拆分结果的乘积最大化,一开始碰到类似的题目,很难想象应该拆分为多少个数,容易想复杂。但其实对于一个数n,可以先考虑将其拆分为两个数,1+(n-1),2+(n-2),...,一共有n//2种拆分方式,对于每一种拆分方式下的两个数,有可能它们当前的乘积已经最大,也有可能这两个数还能继续拆分,使乘积更大。dp数组dp[i]表示拆分i能得到的最大乘积,因此第一个for循环遍历n,第二个for循环从1开始遍历,模拟将i拆分为1+(i-1), 2+(i-2),...,(i-1)+1等等,在从左往右遍历的过程中,比i小的dp值已经计算得到,因此在当前拆分的基础上,可以比较继续拆分i-j会不会获得更大的乘积。dp数组从n=2开始初始化,第一个for循环就从3开始遍历,包含n;第二个for循环从1到i(不包含i),进一步优化中,数学上将一个数拆分为多个近似相同的数时乘积最大,两个数拆分到它们之间相同或只差1时,可以认为已经列举完可能出现最大值的拆分情况,因此j的遍历可以只到i//2。

动态规划问题中最难的部分是思路,代码实现倒是很简单:

class Solution:
    def integerBreak(self, n: int) -> int:
        dp = [0] * (n + 1)
        dp[2] = 1
        for i in range(3, n + 1):
            for j in range(1, i):
                dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j))
        return dp[n]

LeetCode 96 不同的二叉搜索树 

题目链接:96. 不同的二叉搜索树 - 力扣(Leetcode)

 这道题也比较难想思路,需要对二叉搜索树有较为深刻的理解。

首先dp数组的含义是节点值从1到i互不相同的二叉搜索树的种数,和题目要求的从 1 到 n 互不相同的二叉搜索树种树是一致的。对于二叉搜索树,以不同的节点为根节点时,二叉树的构成是有固定限制的,比根节点小的值构成其左子树,大的值位于右子树,左右子树又能继续以根节点作为参考,构成不同的子树。左右子树的数值不同,但是数值的相对关系是类似的,比如1-3和2-4可以构成的二叉树种数是相同的,二叉搜索树的种数因此也就可以根据左右子树的节点数量获得各自的种数,左右的种数相乘得到以某个值为根节点时的二叉搜索树种数。

由于1到i中可以以i个节点作为根节点,不同根节点的二叉搜索树是不同的,因此计算dp[i]时,需要一层for循环累加以不同节点作为根时的结果:

class Solution:
    def numTrees(self, n: int) -> int:
        # dp数组含义:dp[i]为节点值从 1 到 i 互不相同的 二叉搜索树 的种数
        dp = [0 for _ in range(n+1)]  # dp[0]为空节点
        dp[0], dp[1] = 1, 1
        for i in range(2, n+1):
            for j in range(i):
                dp[i] += dp[j] * dp[i-j-1]
        return dp[n]

小结

这两题的实现上还有一点点相似,都是两层for循环,时间复杂度是O(n^2),空间复杂度是O(n)。但dp数组的含义不同,第二层遍历的递推过程就有比较大的差异,一个是只取遍历过程中的最大值,一个需要不断累加。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全实战从 0 到 1 彻底掌握 XXE

0x01 什么是 XXE个人认为,XXE 可以归结为一句话:构造恶意 DTD介绍 XXE 之前,我先来说一下普通的 XML 注入,这个的利用面比较狭窄,如果有的话应该也是逻辑漏洞。既然能插入 XML 代码,那我们肯定不能善罢甘休…

ROS Cartographer--Algorithm

ROS Cartographer–Algorithm 原文:Algorithm walkthrough for tuning 论文地址(Google Search):Real-Time Loop Closure in 2D LIDAR SLAM ROS Cartographer的完整参考文件:Cartographer ROS Integration 概述 本地SLAM通常由前端和后端…

Python满屏表白代码

目录 前言 爱心界面 无限弹窗 前言 人生苦短,我用Python!又是新的一周啦,本期博主给大家带来了一个全新的作品:满屏表白代码,无限弹窗版!快快收藏起来送给她吧~ 爱心界面 def Heart(): roottk.Tk…

【Linux】计算机网络1

计算机网络的背景背景:早在20世纪50年代初,美国建立的地面防空系统就是将地面的雷达和其他测量控制设备的信息通过通信线路汇集到一台中心计算机进行处理,开创了把计算机技术和通信技术相结合的尝试。20世纪60年代中期开始,出现、…

OSPF----特殊区域

目录 OSPF----特殊区域 第一大类----末梢区域(Stub Area) 完全末梢区域((Totally Stub Area) 第二大类特殊区域----非完全末梢区域(NSSA) OSPF----特殊区域 第一大类----末梢区域(Stub Area&#xff09…

动态版通讯录——“C”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是动态版通讯录啦,其实之前,我就已经写过静态版的通讯录了,只是存在着一些问题,具体细节可以详细看看我的静态版通讯录,好了,话不多说&…

计算机视觉知识点(一)——交并比(IoU)及其若干改进

交并比(IoU)前言IoU公式及示意图IoU Loss缺点GIoU Loss公式及示意图缺点DIoU公式及示意图CIoU前言 目标检测是一个常见的计算机视觉任务,在目标检测任务中,交并比作为评判检测框的标准具有很重要的意义,在实际的应用中…

【百面成神】java web基础7问,你能坚持到第几问

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:纯手打总结面试题,自用备用 🌰 文章简介:java web最基础、重要的8道面试题 文章目…

SAP 系统中过账码or记账码

SAP中过账码和记账码是指同一个事物。 在实际业务中,记账码就是只有“借”和“贷”, 而SAP中Posting Code肩负着更多的任务: 1)界定科目类型, 2)借贷方向, 3)凭证输入时画面上的字…

运算放大器:电压比较器、电压跟随器、同相比例放大器

目录一、单限电压比较器二、滞回电压比较器三、窗口电压比较器四、正点原子直流电机驱动器电路分析实战1、电压采集电路2、电流采集电路3、过流检测电路Ⅰ、采用分压后的输入电压:Ⅱ、采用理想电压源的输入电压:Ⅲ、同相输入电压采用的是非理想电压源&am…

自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】

文章目录2020年4月应用题算法设计题2020年10月应用题算法设计题2021年4月应用题算法设计题2021年10月应用题算法设计题2022年4月应用题算法设计题2022年10月应用题算法设计题2020年4月 应用题 有二叉树如题29图所示,写出该二叉树的先序遍历、中序遍历和后序遍历序列。 如题…

AI真的快让我们失业了,从ChatGPT到Midjourney

参考文章: https://mp.weixin.qq.com/s/3RdHPPhYgDfB6KY6Y9Sk2A跟AI有关的新闻,一个接着一个。前一天你还和往常一样进入梦乡,第二天醒来就能被新的AI新闻“炸弹”震得心惊。 以ChatGPT为代表的AI语言模型,以Midjourney为代表的…

五、寄存器方式LED灯控制

寄存器方式LED灯控制 1、原理 电路图中相同网络标号表示它们是连接在一起,STM32F103ZET6的PC0-PC7 管脚连接D1-D8发光二极管阴极,如要使 D1 指示灯亮,只需控制 PC0 管脚输出低电平。 2、工程文件 Keil工程包含main.c、stm32f10x.h、start…

vue开发常用的工具有哪些

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…

开启新航路,拓尔思发力AIGC市场 | 爱分析调研

2022年,随着AI聊天机器人GhatGPT在世界范围内持续火爆,极具创意、表现力、个性化且能快速迭代的AIGC技术成功破圈,成为全民讨论热点。 AIGC是指在确定主题下,由算法模型自动生成内容,包括单模态内容如文本、图像、音频…

【Leetcode】队列的性质与应用

文章目录225. 用队列实现栈示例:提示:分析:题解:622. 设计循环队列示例:提示:分析:题解:225. 用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈&…

个人时间管理网站—Git项目管理

🌟所属专栏:献给榕榕🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该专栏系为女友准备的,里面会不定时发一些讨好她的技术作品,感兴趣的小伙伴可以关注一下~👉文章简介…

面试官:如何保证接口幂等性?一口气说了9种方法!

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 大家好,我是大彬~ 今…

idea 关于git使用总结分享

文章目录前言idea 关于git使用总结分享1. git 目录指定自己的git2. git 回滚到指定提交3. git 回滚某个文件4. 从远程仓库分支拉取最新代码5. 切换分支6. 上传到远程仓库7. git 关联上游服务8. 从上游分支拉取最新的代码9. 从上游仓库上取一个新的branch到远程仓库前言 如果您觉…

【LeetCode】二叉树的后序遍历(递归,迭代)

目录 题目要求:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 方法一:递归 方法二:迭代 思路分析: 代码展示: 复杂度分析 方法三:迭代进阶 思路分析: 代码展示&a…
最新文章