算法打卡day35

今日任务:

1)343. 整数拆分

2)96.不同的二叉搜索树

3)复习day11

343. 整数拆分

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

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
说明: 你可以假设 n 不小于 2 且不大于 58。

文章讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分哔哩哔哩bilibili

思路:

1. 创建一个一维数组 dp,其中 dp[i] 表示将正整数 i 拆分后得到的最大乘积。

2. 初始时,将 dp[0]dp[1] 都设为0,因为0和1无法拆分成至少两个正整数的和。

3. 对于正整数 i,从 1 开始遍历到 i-1,对每个位置 j,计算将 i 拆分成 ji-j 的和,然后将这两部分的最大乘积相乘得到当前的最大乘积。

4. 在计算 dp[i] 时,需要考虑 i-j 是否继续拆分,如果 i-j 继续拆分后的最大乘积大于 i-j 本身,那么就可以继续拆分,否则不拆分。

5. 最后返回 dp[n],即正整数 n 拆分后得到的最大乘积。

class Solution:def integerBreak(self, n: int) -> int:dp = [0] * (n + 1)dp[2] = 1  # 2只能拆分为1+1,所以初始为1for i in range(3, n + 1):for j in range(1, (i+1)//2+1):# 将i拆分成j和i-j,比较i-j的拆分结果与i-j本身的乘积,取最大值dp[i] = max(dp[i], max(j * dp[i - j], j * (i - j)))return dp[n]

第二层for循环时,最初的想法从1遍历到i-1,去拆分。但实际上,由于对称性,只需要遍历到i的一半就足够了。这样做可以减少不必要的计算,提高代码效率。

刚才的思路是动态规划,这题我们还可以找寻数学规律去做

  • 首先考虑特殊情况,当n为2时,最大乘积为1;当n为3时,最大乘积为2。
  • 对于其他大于3的n,尽可能多地拆分成3,并计算拆分后的乘积。
  • 根据数学规律,当n为3的倍数时,将n全部拆分为3可以得到最大乘积。
  • 当n除以3余数为1时,将最后一个3拆分为2*2可以得到更大的乘积。
  • 当n除以3余数为2时,直接拆分为3的乘积即可。
class Solution:def integerBreak(self, n: int) -> int:# 如果n为2,只能拆分为1+1,所以乘积为1if n == 2:return 1# 如果n为3,只能拆分为1+2,所以乘积为2if n == 3:return 2# 如果n可以被3整除,全部拆分为3的乘积会得到最大值if n % 3 == 0:return 3 ** (n // 3)# 如果n除以3余数为1,那么将最后的3拆分为2*2可以得到更大的乘积if n % 3 == 1:return 3 ** ((n - 4) // 3) * 4# 如果n除以3余数为2,直接拆分为3的乘积if n % 3 == 2:return 3 ** (n // 3) * 2

96.不同的二叉搜索树

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

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
示例 1:输入:n = 3
输出:5
解析:[1,None,3,2,None],[1,None,2,None,3],[2,1,3],[3,2,None,1,None],[3,1,None,,None,2]示例 2:
输入:n = 1
输出:1

文章讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划找到子状态之间的关系很重要!| LeetCode:96.不同的二叉搜索树哔哩哔哩bilibili

思路:

这个问题可以通过动态规划来解决。我们可以定义一个数组 dp,其中 dp[i] 表示以 1 ... i 为节点组成的二叉搜索树的数量。然后,我们可以通过迭代计算 dp[i] 的值,直到 dp[n] 为止。

1. 当 n = 0n = 1 时,只有一种情况,即空树或只有一个节点的树,此时 dp[0] = dp[1] = 1

2. 对于任意 i,我们可以将2 ... i 中的每个数字都作为根节点,然后分别计算左子树和右子树的数量,最后将左右子树的数量相乘即可得到以 i 为根节点的二叉搜索树的数量。这个过程可以表示为 dp[i] = sum(dp[j - 1] * dp[i - j]),其中 j 表示根节点的值。   

  • 当n = 2 有两个节点时:
    • 我们以1为根节点时,其左子树没有节点,故左子树只有一种情况,那就是空,右子树只有一个节点,那就是n=1的情况故为1。组合起来有1*1=1种情况
    • 我们以2为根节点时,其左子树只有一个节点,那就是n=1的情况故为1,右子树没有节点故为空一种情况。组合起来有1*1=1种情况
    • 故合起来n = 2 有两个节点时有1+1=2两种情况

        

  • 当n = 3 有三个节点时:
    • 我们以1为根节点时,其左子树没有节点故为空1种情况,右子树只有两个节点,那就是n=2的情况故为2。组合起来有1*2=2种情况
    • 我们以2为根节点时,其左右子树只有一个节点,那就是n=1的情况故为1,组合起来有1*1=1种情况
    • 我们以3为根节点时,其左子树只有两个节点,那就是n=2的情况故为2,右子树没有节点故为空1种情况
    • 合起来n = 2 有两个节点时有2+1+2=5两种情况

        

3.最终返回 dp[n] 即可。

class Solution:def numTrees(self, n: int) -> int:# 初始化动态规划数组,dp[i] 表示以 1 ... i 为节点组成的二叉搜索树的数量dp = [0] * (n + 1)dp[0]= 1for i in range(1, n + 1):for j in range(i):dp[i] += dp[j] * dp[i - j - 1]return dp[n]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【kafka】安装

也是第二次安装,蛮记录一下 1.安装kafka之前需要先完成zookeeper的安装 【zookeeper】安装 2. Apache Kafka官网下载 3. 解压完成后修改server.properties配置文件 修改日志文件存放路径 查看与zookeeper连接的端口是否和zookeeper服务所在的端口一致 &#xf…

Transformer的Decoder的输入输出都是什么

目录 1 疑问:Transformer的Decoder的输入输出都是什么 2 推理时Transformer的Decoder的输入输出 2.1 推理过程中的Decoder输入输出 2.2 整体右移一位 3 训练时Decoder的输入 参考文献: 1 疑问:Transformer的Decoder的输入输出都是什么 …

小型燃气站3D可视化:打造安全高效的燃气新时代

随着科技的不断进步,越来越多的行业开始融入3D可视化技术,燃气行业也不例外。 小型燃气站作为城市燃气供应的重要节点,其安全性和运行效率至关重要。传统的燃气站管理方式往往依赖于人工巡检和纸质记录,这种方式不仅效率低下&…

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2

目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数(先序遍历):Swap 函数(中序遍历) 不可行:Swap 函数(后序遍历)&#xff…

授权协议OAuth 2.0之JWT

写在前面 本文看下JWT相关内容。 1:为什么需要JWT OAuth2.0规范中并没有规定access_token使用什么样的格式,只要求满足,不连续性,不可猜测性,不可重复性就可以了,所以我们在生成accest_token的时候就比较…

格雷希尔G80L-T系列大口径快速连接器,在汽车膨胀水箱的气密性测试密封方案

副水箱也有人称作膨胀水箱,是汽车散热系统的一个重要组成部分,当水箱里面的温度过高的时候就会产生一定的压力,而副水箱可以根据热胀冷缩来帮助水箱和发动机排出去多余的水,起到一个调节的作用,副水箱由PP/PE塑料注塑而…

spring高级篇(一)

1、ApplicationContext与BeanFactory BeanFactory是ApplicationContext的父级接口:(citlaltu查看类关系图) 在springboot的启动类中,我们通过SpringApplication.run方法拿到的是继承了ApplicationContext的ConfigurableApplicatio…

Qt使用miniblink第三方浏览器模块

文章目录 一、前言二、miniblink简介三、miniblink使用四、运行效果五、工程结构 一、前言 本文取自刘典武大师:Qt编写地图综合应用58-兼容多浏览器内核 用Qt做项目过程中,遇到需要用到浏览器控件的项目,可能都会绕不开一个问题,那…

【Web】VS Code 插件

专栏文章索引:Web 有问题可私聊:QQ:3375119339 目录 一、安装步骤 二、插件 1.Chinese (Simplified) (简体中文) 2.open in browser 3.vscode-icons 4.Live Server 5.Live Server Preview 6.翻译(英汉词典) 一、安装步骤 点击 “扩…

创纪录的里程碑!光镊阵列捕获逾6,000中性原子,量子计算再达新高

论文链接: https://arxiv.org/abs/2403.12021 2024年3月18日,研究人员成功开发出一种大规模光镊阵列,能够在12,000个位点上捕获超过6,100个中性原子,同时在几个关键性能指标上达到新的高度: 1)相干时间达到…

新零售门店、商品、会员管理指标体系总览

新零售,旨在打破传统零售业的边界,引入先进科技和数字化手段,通过整合线上线下渠道,全面提升用户体验,并实现更智能、高效、个性化的零售运营模式。这一模式不仅仅关注销售产品,更注重构建全方位的购物生态…

《中医临床诊疗术语》数据库

最新版的《中医临床诊疗术语》于2023年3月17日由国家中医药管理局提出的,由国家市场监督管理总局和国家标准化管理委员会共同发布。新版的修订是为落实相关政策文件要求,推进中医医疗服务规范化、标准化管理,提高中医医疗服务标准化水平和管理…

asyncio异步编程

参考视频:02 协程_哔哩哔哩_bilibili 1.协程:(不是计算机中真实存在的,人为创造出的概念),也可称为微线程。 本质是用一个线程在一段代码中来会切换游走的线程,是一种用户态内的上下文切换技术…

中科驭数:DPU是构建高效智算中心基础设施的必选项

4 月 15 日,在江苏省未来网络创新研究院、网络通信与安全紫金山实验室举办的“2024智算网络技术与应用创新峰会”上,中科驭数作为DPU算力基础设施领军企业,受邀出席本次峰会。中科驭数产品运营部副总经理曹辉先生在《基于DPU的高效智算中心算…

OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:2024年AI初学者需要掌握的热门技能有哪些? 0 导 读 本文主要介绍2024年AI初学者需要掌握的热门技能。 1 前 言 人工智能无疑是技…

基于java+springboot+vue实现的智慧党建系统(文末源码+Lw+ppt)23-58

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统智慧党建管理采取了人工的管理方法,但这种管…

openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置

文章目录 openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置264.1 恢复BIOS出厂设置264.2 修改相关BIOS设置264.3 重启操作系统 openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置 本章节主要介绍openGauss数据库内核基于鲲鹏服务…

BTI功能验证与异常解析

BTI分支目标识别精讲与实践系列 思考 1、什么是代码重用攻击?什么是ROP攻击?区别与联系? 2、什么是JOP攻击?间接分支跳转指令? 3、JOP攻击的缓解技术?控制流完整性保护? 4、BTI下的JOP如何…

【MATLAB源码-第53期】m代码基于粒子群算法(PSO)的三维路径规划,显示最优路径和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 粒子群算法(Particle Swarm Optimization,简称PSO)是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述: 基本思想: 鸟群在寻找食物时,每只鸟都…

【开发篇】十三、JVM基础参数设置与垃圾回收器的选择

文章目录 1、-Xmx 和 –Xms2、-XX:MaxMetaspaceSize 和 –XX:MetaspaceSize3、-Xss4、不建议改的参数5、其他参数6、选择GC回收器的调试思路7、CMS的并发模式失败现象的解决8、调优案例 GC问题解决方式: 优化JVM基础参数,避免频繁Full GC减少对象的产生…