代码随想录算法训练营day40

题目:343. 整数拆分、96.不同的二叉搜索树

参考链接:代码随想录

343. 整数拆分

思路:五部曲来走。dp数组,dp[i]用于记录拆i得到的最大乘积和,我们要求的也就是dp[n];递推公式,我们想拆分i,可以拆成i-1和1,这样dp[i]就是dp[i-1]或者就是i-1,也可以拆成i-2和2,这样就是2dp[i-2]和2(i-2)取最大值,综合讨论一下就是拆成i-j和j,然后比较dp[i-j]*j和(i-j)*j的最大值,这里因为dp[i-j]必须要进行至少拆成两个数,所以没有包含i-j,故我们还需要比较i-j,递推公式就是dp[i]=max(dp[i-j]*j,(i-j)*j);初始化,这里0和1根据题目无法拆分,也就无需初始化这两个,直接初始化dp[2]=1;遍历顺序和举例略。时间复杂度O(n^2)。

class Solution {
public:int integerBreak(int n) {vector<int> dp(n+1);//其实这里也不用初始化为0dp[2]=1;for(int i=3;i<=n;i++){for(int j=1;j<=i-2;j++){//最多只能拆i-2个,这样剩下2,如果再拆得只剩1,dp[1]就没有意义了dp[i]=max(dp[i],max(dp[i-j]*j,(i-j)*j));//注意C++的max只能有两个参数}//更新dp[i]需要一个循环遍历}return dp[n];}
};

看标答发现可以优化,即拆分的时候拆到一半就可以了,根据数学推导,拆分成相同的子数乘积比较大,故拆得超过一半必定不可能是最大值,当然我们写代码的时候上面其实就可以了:

class Solution {
public:int integerBreak(int n) {vector<int> dp(n + 1);dp[2] = 1;for (int i = 3; i <= n ; i++) {for (int j = 1; j <= i / 2; j++) {dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));}}return dp[n];}
};

贪心方法需要数学证明略。

96.不同的二叉搜索树

思路:本题一看根本没有思路,主要要了解BST,就是左子树都小于头,右子树都大于头,而且每一个子树都是BST。使用dp五部曲。首先是dp[i]表示i个节点组成的不同BST个数;然后是递推公式,我们可以举例考虑3的情况和2来组合,首先是1为头结点,3可以插到1和2中间,也可以插到2右边,两种,然后是2为头节点,这时只有一种,最后是3为头结点,也是两种,共有5种。仔细对比可以发现规律,1为头时,两个节点的布局和n为2的时候一样,因为左右都是两个节点,3为头也是如此,2为头的时候,左右各一个节点,布局同n=1的情况。dp[3]就是将1,2,3分别为头结点的BST数量相加。1为头,左子树节点个数为0,右子数节点个数为2,即dp[0]*dp[2],2为头,dp[1]*dp[1],3为头dp[2]*dp[0]。
在这里插入图片描述
在这里插入图片描述
故对dp[i],我们也考虑1到i为头节点的数量相加,dp[i]=dp[0]*dp[i-1]+dp[1]*dp[i-2]+…+dp[i-1]*dp[i],这是重新回顾dp[i]的定义,可以定义为i个不同元素组成BST的数量;初始化,dp[0]=1,dp[1]=1,其他都可以推出来;遍历顺序从前往后;举例略。时间复杂度O(n^2)。

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

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

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

相关文章

ZooKeeper集群的搭建

ZooKeeper集群的搭建 将master节点的/data目录下的ZooKeeper安装包解压到/opt/software目录下 tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/software/在master节点切换至ZooKeeper安装目录的conf目录下&#xff0c;将zoo_sample.cfg重命名为zoo.cfg&#xff0c;并…

OpenHarmony语言基础类库【@ohos.util.LinkedList (线性容器LinkedList)】

LinkedList底层通过双向链表实现&#xff0c;双向链表的每个节点都包含对前一个元素和后一个元素的引用。当需要查询元素时&#xff0c;可以从头遍历&#xff0c;也可以从尾部遍历&#xff0c;插入、删除效率高&#xff0c;查询效率低。LinkedList允许元素为null。 LinkedList…

基于Springboot的点餐平台

基于SpringbootVue的点餐平台的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 菜品信息 菜品资讯 购物车 后台登录 用户管理 菜品分类管理 菜品信息管理 …

#ESP32S3N8R8(按键点灯)

一、按键对应端口为GPIO0&#xff08;上拉&#xff09; 二、代码 #include <stdio.h> #include "driver/gpio.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "unistd.h"void app_main(void) {int co…

YOLOv8 实现车牌检测,生成可视化检测视频(20240424)

原项目源码地址&#xff1a;GitHub 我的源码地址&#xff1a;Gitee 环境搭建请参考&#xff1a;Win10 搭建 YOLOv8 运行环境&#xff08;20240423&#xff09;-CSDN博客 环境测试请参考&#xff1a;本地运行测试 YOLOv8&#xff08;20240423&#xff09;-CSDN博客 训练数据…

【java数据结构-优先级队列向下调整Topk问题,堆的常用的接口详解】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 …

OpenHarmony实战开发-媒体查询 (@ohos.mediaquery)

概述 媒体查询作为响应式设计的核心&#xff0c;在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景&#xff1a; 针对设备和应用的属性信息&#xff08;比如显示区域、深浅色、分辨率&#xff09;&#xff0…

异步日志方案spdlog

异步日志方案spdlog spdlog 是一款高效的 C 日志库&#xff0c;它以其极高的性能和零成本的抽象而著称。spdlog 支持异步和同步日志记录&#xff0c;提供多种日志级别&#xff0c;并允许用户将日志输出到控制台、文件或自定义的接收器。 多线程使用和同步、异步日志没有关系是…

Linux系统----信号(万字文章超级详细并且简单易学附有实操shell指令图及注释!)

绪论​ “Do one thing at a time, and do well.”&#xff0c;本章开始Linux系统其中信号是学习操作系统的基本下面将会讲到什么是信号、信号的多种产生方式、信号如何保存的、信号如何处理的、以及一些信号的细节。话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑…

【鸿蒙】通知

一、概要 Android的Notification。 说到通知&#xff0c;就想到了推送。 通知这块可以做到不像Android一样需要集成各家厂商的推送了&#xff0c;不知道是否有建立独立的推送系统 这是官网上介绍的跨APP进行的IPC通知。实际在Android开发过程中&#xff0c;可能这种场景会相对…

MarginNote 3 for Mac:一站式思维导图与笔记神器,让学习更高效

MarginNote 3 for Mac是一款功能强大的阅读和学习工具软件&#xff0c;它将PDF/EPUB阅读器和多种学习工具集成起来&#xff0c;旨在帮助用户更有效地进行阅读、笔记整理以及知识管理。 这款软件的核心功能在于其能够将阅读与学习过程紧密结合。用户可以在阅读文档时&#xff0…

勒索软件安全防护手册

文章目录 相关背景勒索软件概述勒索软件主要类型文件加密类勒索软件数据窃取类勒索软件系统加密类勒索软件。屏幕锁定类勒索软件 勒索软件典型传播方式利用安全漏洞传播利用钓鱼邮件传播利用网站挂马传播利用移动介质传播利用软件供应链传播利用远程桌面入侵传播 典型勒索软件攻…

自动驾驶传感器篇: GNSSIMU组合导航

自动驾驶传感器篇&#xff1a; GNSS&IMU组合导航 1.GNSS1.1 GNSS 系统概述1.2 GNSS系统基本组成1. 空间部分&#xff08;Space Segment&#xff09;&#xff1a;2. 地面控制部分&#xff08;Ground Control Segment&#xff09;&#xff1a;3. 用户设备部分&#xff08;Use…

Stable Diffusion WebUI 使用 VAE 增加滤镜效果

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文主要介绍 VAE 模型&#xff0c;主要内容有&#xff1a;VAE 模型的概念、如果下载 VAE 模型、如何安装 VAE 模型、如…

开箱展示——深圳市雷龙发展的存储卡

最近收到了来自深圳市雷龙发展有限公司寄来的存储卡&#xff0c;奈何最近也没有好的嵌入式项目需要用到&#xff0c;哪这里就简单给大家展示一下吧。 原始包装大概就是这样子了垃&#xff0c;有两个存储芯片和一个简单的转接器&#xff0c;测试的时候可以把芯片焊接到转接器…

如何安装mysl驱动程序jar包

简介&#xff08;为什么要安装mysql驱动jar包&#xff09; MySQL 驱动程序&#xff08;通常以 JAR 文件的形式提供&#xff09;用于在 Java 应用程序中连接和与 MySQL 数据库进行交互。这些驱动程序提供了一组 API&#xff0c;使 Java 应用程序能够执行诸如查询、插入、更新和…

【月报】​Aavegotchi 开发更新 |2024 年 4 月版,多款游戏上新玩法

朋友们好&#xff01; 春天来了&#xff0c;我们热情洋溢的团队很高兴能为 Gotchiverse 带来一堆新鲜的更新和丰富的功能。让我们一起来看看这次开发更新带来了什么&#xff1a; Gotchichain 选择定居基地 精神力量竞技场获得了 EBIC 更新 高奇守护者通过全新的进阶系统提升…

C# APS.NET CORE 6.0 WebApi在IIS部署报错

今天尝试着把基于 APS.NET CORE6.0开发的webAPI程序部署到IIS中&#xff0c;当打开网站地址时报错&#xff0c;无法打开&#xff0c;于是查找资料最终进行了解决。 打开 IIS →模块 查看列表中是否存在 AspNetCoreModuleV2&#xff0c;如下&#xff1a; 对应的应用池需要选择“…

海外云服务对比: AWS、GCP、Azure 与 DigitalOcean

云计算市场持续增长&#xff0c;预计到2030年将达到 2432.87 亿美元。在这个庞大的市场中&#xff0c;三家云服务提供商——亚马逊&#xff08;AWS&#xff09;、谷歌云平台&#xff08;GCP&#xff09;和微软Azure——共占云市场份额的64%。当用户选择云服务提供商来托管他们的…

【React】反向代理和修改打包后的目录

反向代理 前提是做了反向代理&#xff1a; 安装 http-proxy-middleware npm i http-proxy-middleware在src/下新建 setupProxy.js const proxy require("http-proxy-middleware");module.exports function(app) {app.use(proxy("/api", {target: &qu…