Day 41:动态规划 LeedCode 343. 整数拆分 96.不同的二叉搜索树

news2024/11/13 21:32:22

343. 整数拆分

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

思路:

1.确定dp数组(dp table)以及下标的含义

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

2.确定递推公式

dp[i]=max(dp[i],j*(i-j),j*dp[i-j])

j*(i-j):拆分成两个数之间相乘

j*dp[i-j]:拆分成两个及两个以上

为什么j不拆分?

从1遍历到j,相当于j已经被拆分过了

3.dp数组如何初始化

dp[2]=1:2拆分成1*1=1

0,1无法拆分,不对dp[0],dp[1]初始化

所以后面我们遍历时需要满足i-j>=2

4.确定遍历顺序

dp[i]=max(dp[i],j*(i-j),j*dp[i-j])

由地推公式可知,从左往右遍历

5.举例推导dp数组

代码:

class Solution {
    public int integerBreak(int n) {
  int[] dp=new int[n+1];
  dp[2]=1;
  //计算得出dp数组中所有值
  for(int i=2;i<=n;i++){
    //将 i拆分成j,i-j
  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];
    }
}

代码优化:

如图可见i可以分成1*2, 1*1*1, 2*1其中1*2和2*1其实是重复了

所以我们拆分时,让i<=i-j,即左边的数小于等于右边

class Solution {
    public int integerBreak(int n) {
  int[] dp=new int[n+1];
  dp[2]=1;
  //计算得出dp数组中所有值
  for(int i=3;i<=n;i++){
    //将 i拆分成j,i-j
  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];
    }
}

96. 不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

思路:

由图可知

当n=3时:

头结点为1,左子结点个数为0,右子节点个数为2  

头结点为2,左子结点个数为1,右子节点个数为1  

头结点为3,左子结点个数为2,右子节点个数为0  

 1.确定dp数组(dp table)以及下标的含义

dp[i]表示有i个结点时,有多少不互相同的二叉树

2.确定递推公式

如图

dp[3]=d[0]*dp[2]+dp[1]*dp[1]+dp[2]*dp[0]

故dp[i]+=dp[j-1]*dp[i-j]

j-1:左子结点个数

i-j:右子节点个数

3.dp数组如何初始化

dp[0]=1;

4.确定遍历顺序

由dp[i]+=dp[j-1]*dp[i-j]可知:dp[i]是根据之前状态得到的

5.举例推导dp数组

class Solution {
    public int numTrees(int n) {
        int[] dp=new int[n+1];
        dp[0]=1;
     for(int i=1;i<=n;i++){
//将i个结点划分成不同左右结点的情况
    for(int j=1;j<=i;j++){
        dp[i]+=dp[i-j]*dp[j-1];
    }

     }
     return dp[n];
    }
}

 

 

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

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

相关文章

《TinyLlama: An Open-Source Small Language Model》全文翻译

【Title】 TinyLlama&#xff1a;开源小语言模型 【Abstract】 我们推出了 TinyLlama&#xff0c;这是一个紧凑的 1.1B 语言模型&#xff0c;在大约 1 万亿个令牌上进行了大约 3 个时期的预训练。 TinyLlama 基于 Llama 2&#xff08;Touvron 等人&#xff0c;2023b&#xff…

自定义Centos的终端的命令提示符

背景 当我们使用终端登陆Centos时&#xff0c;就自动打开了ssh终端。这个终端的命令提示符一般是这样的&#xff1a; 这个以#号结束的一行字&#xff0c;就是我们说的命令提示符了。 这个是腾讯云的服务器的提示符&#xff0c;可以看到主机名是VM-4-7-centos。 但是这个看起…

Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用

随着航空、航天、近地空间遥感平台的持续发展&#xff0c;遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升&#xff0c;呈现出大数据特征。这为相关研究带来了新机遇&#xff0c;但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

SD-WAN提升企业网络体验

在现代企业中&#xff0c;网络体验已成为提升工作效率与业务质量的关键因素。SD-WAN技术的出现&#xff0c;以其独特的优势&#xff0c;为企业提供了优化网络连接、加速数据传输、提升服务质量和应用访问体验&#xff0c;以及增强网络稳定性的解决方案。接下来&#xff0c;我们…

设计模式在芯片验证中的应用——策略

1. 策略模式 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 在RTL设计中可能包含了复杂的多个访问仲裁逻辑&#xff0c;使用了多种算法来确定访问内存优先级顺序&am…

plc远程监控系统

随着工业4.0时代的到来&#xff0c;智能制造成为了工业发展的核心驱动力。在这个信息化、网络化的新时代&#xff0c;PLC远程监控系统以其强大的监控与管理能力&#xff0c;正逐渐成为工业自动化领域的明星产品。今天&#xff0c;我们就来聊聊PLC远程监控系统以及HiWoo Cloud平…

网络协议——OSPF(开放式最短路径优先)详解

1.什么是OSPF 开放式最短路径优先OSPF 是一种动态的高度可靠和高度可扩展的路由协议&#xff0c;用于构建大型网络中的动态路由系统 2. OSPF的协议号为&#xff1a;89 3. OSPF的特点: OSPF是链路状态协议使用了区域概念&#xff1a;减少路由选择协议对路由器CPU&#xff0c;…

从零开始学习Linux(1)---基本命令(1)

1.学习准备 我学习Linux是使用xshell远程登录自己的云服务器来进行。 xshell是一个远程终端管理软件&#xff0c;下载官网&#xff1a; https://www.netsarang.com/products/xsh_overview.htm 下载安装的时候选择 "home/school"…

H.265网页无插件播放EasyPlayer.js流媒体播放器常见问题及解答

EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;无须安装任何插件&#xff0c;起播快、延迟低、兼容性强&#xff0c;使用非常便捷。 今天我们来汇总下用户常见的几个问题及解答。 1、EasyPlayer.js播放多路H.265视…

「每日跟读」英语常用句型公式 第12篇

「每日跟读」英语常用句型公式 第12篇 1. I’m having a hard time __ing 我现在不太能__&#xff08;遇到困难&#xff09; I’m having a hard time concentrating on my work.&#xff08;我现在不太能集中注意力在我的工作上&#xff09; I’m having a hard time slee…

UE5 把蓝图内的变量和事件暴露给序列使用

在蓝图变量内勾选Expose to Cinematics 事件: 在角色内添加自定义事件 在序列内对着角色的号添加Event,选择Trigger 添加关键帧,然后在关键帧右键添加class,在class下绑定事件

抖音小店新手玩家能做吗?跟着我的步骤做,爆单很简单

大家好&#xff0c;我是电商笨笨熊 抖店新手玩家能做吗&#xff1f; 当然可以。 抖音小店自推出以来已经吸引了无数的新手玩家&#xff0c;且不少玩家从个人走到了团队化。 新手做抖店&#xff0c;最重要的是掌握方法&#xff0c;只要方法对了&#xff0c;方向对了&#xf…

工业物联网网关

在数字化浪潮席卷全球的今天&#xff0c;工业物联网&#xff08;IIoT&#xff09;作为连接物理世界与数字世界的桥梁&#xff0c;正在逐渐改变传统工业的面貌。而作为IIoT的核心枢纽&#xff0c;工业物联网网关发挥着至关重要的作用。今天&#xff0c;我们就来深入了解一下工业…

leetcode代码记录(回文数

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#x…

web笔记再整理

前四天笔记在此连接: web前端笔记表单练习题五彩导航栏练习题-CSDN博客https://blog.csdn.net/simply_happy/article/details/136917265?spm1001.2014.3001.5502 # 1.边框弧度​ div {​ width: 300px;​ height: 50px;​ background-color: aqua;​ …

JAVAEE——网络初始

文章目录 网络发展史独立模式网络模式局域网LAN路由器的诞生 网络通信的基础IP地址端口号 认识协议OSI七层模型TCP/IP五层模型 网络发展史 独立模式 在原始的年代中电脑间想要通信需要两台电脑连接一根网线&#xff0c;但是一台电脑基本上只有一个接口。因此想要链接更多的电…

RISCV指令集体系简读之RV32I

RV32I 指令格式 用于寄存器-寄存器操作的R类型指令用于短立即数和访存load操作的I型指令用于访存store操作的s型指令用于条件跳转操作的B类型指令用于长立即数的U型指令用于无条件跳转的J型指令 特点&#xff1a; 所有指令都是32bits&#xff0c; 简化了指令解码&#xff1b;…

SuperMap GIS基础产品FAQ集锦(20240415)

一、SuperMap iDesktopX 问题1&#xff1a;请教一下&#xff0c;同一份数据&#xff0c;用idesktop11.0.1、idesktopX11.1.1和idesktopX11.1.1的临时包&#xff0c;做同一分析&#xff0c;得到的结果数据集都不一样&#xff0c;有的是57条&#xff0c;有的是86条&#xff0c;有…

如何在树莓派安装Nginx并实现固定公网域名访问本地静态站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

【C++语言】初步认识面向对象编程类和对象(上)

文章目录 前言一.初步认识面向过程和面向对象编程1.面向过程编程初步认识2.面向对象编程初步认识 二.C类1. 类的引入&#xff1a;2. 类的定义3.类的访问限定符&&封装3.1 访问限定符3.2 封装 4.类的实例化5.如何计算类的大小 总结C语言系列学习目录 前言 面向对象编程 类…