代码随想录刷题day41| 整数拆分不同的二叉搜索树

文章目录

  • day41学习内容
  • 一、 整数拆分
    • 2.1、动态规划五部曲
      • 1.1.1、 确定dp数组(dp table)以及下标的含义
      • 1.1.2、确定递推公式
      • 1.1.3、 dp数组如何初始化
      • 1.1.4、确定遍历顺序
      • 1.1.5、计算并返回最终结果
    • 1.2、代码
  • 二、不同的二叉搜索树
    • 2.1、动态规划五部曲
      • 2.1.1、 确定dp数组(dp table)以及下标的含义
      • 2.1.2、确定递推公式
      • 2.1.3、 dp数组如何初始化
      • 2.1.4、确定遍历顺序
      • 2.1.5、计算并返回最终结果
    • 2.2、代码
  • 总结
    • 1.感想
    • 2.思维导图


day41学习内容

day41主要内容

  • 整数拆分
  • 不同的二叉搜索树

声明
本文思路和文字,引用自《代码随想录》

一、 整数拆分

343.原题链接

2.1、动态规划五部曲

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

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

1.1.2、确定递推公式

这题我其实一开始的思路是拆成多个数字,还是拆成2个数字。甚至考虑了奇数和偶数的区别,但是想了半天,都发现没有规律。。
递推公式为 dp[i]=max(dp[i],max(j×(i−j),j×dp[i−j]))

其中,i是当前我们想要拆分的整数,j是我们从i中拆出来的一个正整数,(i-j)就是剩下的部分。

递推公式推导

关键点在于理解,对于任意的i,我们尝试所有可能拆分的j(从1到i-1),然后比较:

  1. 不再拆分(i-j)的情况: 直接计算j(i-j)的乘积,即j * (i-j)
  2. 继续拆分(i-j)的情况: 这里我们不直接使用(i-j),而是使用它继续拆分后能得到的最大乘积,即j * dp[i-j]

例子说明

假设n=8,我们要计算dp[8]

  • j=1时,拆分成17,可以比较1*71*dp[7]。由于dp[7]代表7拆分得到的最大乘积,如果7继续拆分能得到的乘积比7大,那么使用dp[7]
  • j=2时,拆分成26,同理比较2*62*dp[6]
  • j=3时,拆分成35,比较3*53*dp[5]

以此类推,直到j=4(因为拆分是对称的,所以当j超过i/2时,情况会重复)。

1.1.3、 dp数组如何初始化

dp[0]和dp[1]没有意义
dp[2] =1 ,因为dp[2]只能拆成1*1

1.1.4、确定遍历顺序

从前向后遍历,没啥好说的

1.1.5、计算并返回最终结果

return dp[n];

1.2、代码

class Solution {public int integerBreak(int n) {//dp[n] 为正整数 n 拆分后的结果的最大乘积int[] dp = new int[n+1];dp[2] = 1;for(int i = 3; i <= n; i++) {for(int j = 1; j <= i-j; j++) {dp[i] = Math.max(dp[i], Math.max(j*(i-j), j*dp[i-j])); }}return dp[n];}
}

这种写法也OK,唯一的不同就是j <= i/2。

class Solution {public int integerBreak(int n) {//dp[n] 为正整数 n 拆分后的结果的最大乘积int[] dp = new int[n+1];dp[2] = 1;for(int i = 3; i <= n; i++) {for(int j = 1; j <= i/2; j++) {dp[i] = Math.max(dp[i], Math.max(j*(i-j), j*dp[i-j])); }}return dp[n];}
}

二、不同的二叉搜索树

96.原题链接

2.1、动态规划五部曲

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

-  1到i为节点组成的二叉搜索树的个数为dp[i]。

2.1.2、确定递推公式

dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]

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

所以递推公式:dp[i] += dp[j - 1] * dp[i - j]; ,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量

2.1.3、 dp数组如何初始化

只需要初始化dp[0]
dp[0] = 1

2.1.4、确定遍历顺序

从前向后遍历,没啥好说的

2.1.5、计算并返回最终结果

return dp[n];

2.2、代码

class Solution {public int numTrees(int n) {int[] dp = new int[n + 1];//初始化0个节点和1个节点的情况dp[0] = 1;dp[1] = 1;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];}
}

总结

1.感想

  • 动态规划还没入门就想放弃了。。。

2.思维导图

本文思路引用自代码随想录,感谢代码随想录作者。

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

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

相关文章

前后台分离nodejs+vue租房信息网站express-94sk3.

本租房管理系统有管理员&#xff0c;租客&#xff0c;屋主三个角色。管理员功能有个人中心&#xff0c;租客管理&#xff0c;屋主管理&#xff0c;房源信息管理&#xff0c;订单信息管理&#xff0c;屋主申诉管理&#xff0c;通知公告管理&#xff0c;留言板管理&#xff0c;系…

pytorch剪枝

原文&#xff1a;https://blog.51cto.com/u_16213398/10059574 Pytorch剪枝实现指南 指南概述 在这篇文章中&#xff0c;我将向你介绍如何在PyTorch中实现模型剪枝。剪枝是一种优化模型的技术&#xff0c;可以帮助减少模型的大小和计算量&#xff0c;同时保持模型的准确性。…

hcip-datacom英文词汇积累简述2

邻居会话初级阶段: down 不工作的: dead 间隔: interval 失效时间间隔: dead interval 努力尝试: attempt 轮询: poll 轮询时间间隔: poll interval 初始化: init 方法: way 交换: exchange 装载: loading 完全地: full 系统名称: sysname 地址: address 回环: loopback 网络: …

VMware使用PowerCLI 修改分布式虚拟交换机的默认上联接口为LAG

简介 创建VMware 分布式交换机vDS 并配置 LACP接口时&#xff0c;然后创建新的默认分布式端口组不会默认使用LACP的上联接口。这意味着当创建新的端口组时&#xff0c;不可避免地会导致没手动修改上联端口的问题&#xff0c;导致网络不通&#xff0c;因为它们无可用的上联端口…

Electron的学习

目录 项目初始化可以看官网非常详细根路径创建.vscode文件夹主进程和渲染进程之前的通信ipcRenderer.send和ipcMain.on的使用ipcRenderer.invoke和ipcMain.handle的使用 切换主题模式文件拖放保存消息通知进度展示图标闪烁自定义菜单自定义右键菜单 项目初始化可以看官网非常详…

基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 5…

如何将平板或手机作为电脑的外接显示器?

先上官网链接&#xff1a;ExtensoDesk 家里有一台华为平板&#xff0c;自从买回来以后除了看视频外&#xff0c;基本没什么作用&#xff0c;于是想着将其作为我电脑的第二个屏幕&#xff0c;提高我学习办公的效率&#xff0c;废物再次利用。最近了解到华为和小米生态有多屏协同…

FMEA引领智能家居安全革新,打造无忧智能生活新纪元!

在智能家居日益普及的今天&#xff0c;如何确保家居安全成为消费者关注的焦点。本文将探讨如何通过FMEA&#xff08;故障模式与影响分析&#xff09;这一强大的质量管理工具&#xff0c;为智能家居赋能&#xff0c;打造安全无忧的智能生活新体验。 一、FMEA在智能家居领域的应用…

Python深度学习032:conda操作虚拟环境env的全部命令

文章目录 创建和管理环境环境列表和检查环境的保存与复制更新环境清理 CondaConda 是一个开源的包管理器和环境管理器,可以用于安装、运行和升级包和环境。 使用 Conda,你可以创建、导出、列出、删除和更新环境,这些环境可以包含不同版本的 Python 以及/或软件包。 下面列出…

wireshark数据流分析-学习日记day1

参考内容&#xff1a; 网址hxxp://194.55.224[.]9/liuz/5/fre.php描述Loki Bot C2 网址早在 2023-08-15 就被注意到了2023-07-27 记录的 IcedID C2 域&#xff1a; vrondafarih[.]com - HTTP trafficmagiketchinn[.]com - HTTPS trafficmagizanqomo[.]com - HTTPS traffic 网…

【Python从入门到进阶】52、CrawlSpider链接提取器的使用

接上篇《51、电影天堂网站多页面下载实战》 上一篇我们采用Scrapy框架多页面下载的模式来实现电影天堂网站的电影标题及图片抓取。本篇我们来学习基于规则进行跟踪和自动爬取网页数据的“特殊爬虫”CrawlSpider。 一、什么是CrawlSpider&#xff1f; 1、CrawlSpider的概念 Cr…

算法打卡day23

今日任务&#xff1a; 1&#xff09;39. 组合总和 2&#xff09;40.组合总和II 3&#xff09;131.分割回文串 39. 组合总和 题目链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;…

(十)Docker的基本操作

1.1.镜像操作 1.1.1.镜像名称 首先来看下镜像的名称组成&#xff1a; 镜名称一般分两部分组成&#xff1a;[repository]:[tag]。在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像 如图&#xff1a; 这里的mysql就是repository&#xff0c;5.7就是…

Python学习: 错误和异常

Python 语法错误 解析错误&#xff08;Parsing Error&#xff09;通常指的是程序无法正确地解析&#xff08;识别、分析&#xff09;所给定的代码&#xff0c;通常是由于代码中存在语法错误或者其他无法理解的结构导致的。这可能是由于缺少括号、缩进错误、未关闭的引号或其他括…

c++20 的部分新概念及示例代码-Contracts,Ranges

C20 引入了 contracts&#xff08;契约&#xff09;&#xff0c;这是一种编程范式&#xff0c;它允许程序员在代码中添加先决条件&#xff08;preconditions&#xff09;、后置条件&#xff08;postconditions&#xff09;和断言&#xff08;assertions&#xff09;等契约&…

数据结构——二叉树——二叉搜索树(Binary Search Tree, BST)

目录 一、98. 验证二叉搜索树 二、96. 不同的二叉搜索树 三、538. 把二叉搜索树转换为累加树 二叉搜索树&#xff1a;对于二叉搜索树中的每个结点&#xff0c;其左子结点的值小于该结点的值&#xff0c;而右子结点的值大于该结点的值 一、98. 验证二叉搜索树 给你一个二叉树的…

P6维护:Oracle P6服务性能优化

前言 本文将介绍如何对ORACLE Primavera P6 EPPM软件进行性能调优&#xff0c;考虑到P6主要采用JAVA语言编制&#xff0c;且其使用的是Weblogic Server应用服务器部署P6各项服务器&#xff0c;其性能优化的原理便是基于其JVM特征参数进行设置 方法一&#xff1a;修改配置文件…

Flutter Key 讲解

key --- Value 模式模式下&#xff0c;value就是我们的widget 为什么要有key&#xff1f; flutter中是增量更新&#xff0c;只更新了差异点。 任何的恶widget都有key。 有些时候不使用key。会导致渲染引擎失控&#xff0c;更新的时候没有参考物key. 为什么会有上面失控的情…

Maplesoft Maple 2024(数学科学计算)mac/win

Maplesoft Maple是一款强大的数学计算软件&#xff0c;提供了丰富的功能和工具&#xff0c;用于数学建模、符号计算、数据可视化等领域的数学分析和解决方案。 Mac版软件下载&#xff1a;Maplesoft Maple 2024 for mac激活版 WIn版软件下载&#xff1a;Maplesoft Maple 2024特别…

银行业架构网络BIAN (Banking IndustryArchitecture Network)详细介绍

BIAN ( The Banking Industry Architecture Network) 是一个业界多方协作的非营利性组织&#xff0c;由全球领先银行、技术提供商、顾问和学者组成&#xff0c;定义了一个用以简化和标准化核心银行体系结构的银行技术框架。这一框架基于面向服务的架构 (SOA) 原则&#xff0c;银…