刷题记录|Day41 ● 343. 整数拆分 ● 96.不同的二叉搜索树

芒果YOLO11改进22:检测头Head篇:即插即用|《新颖高效AsDDet检测头》独一无二的结构改进,公开数据集mAP高效涨点,即插即用|检测头新颖改进,性能高效涨点,全网首发独一份 检测头Head篇:即插即用|《新颖高效AsDDet检测头》独一无二的结构改进,公开数据集mAP高效涨点,即插即用|检测头新颖改进,性能高效涨点,全网首发独一份 阅读详情

刷题记录|Day41
● 343. 整数拆分
● 96.不同的二叉搜索树

● 343. 整数拆分

题目描述

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。
​
返回 你可以获得的最大乘积 。
​
示例 1:
​

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

​
示例 2:
​

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

​
提示:
​

  • 2 <= n <= 58

解题思路

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 - 1; j++) {
                    dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
                }
            }
            return dp[n];
    }
};

结果

在这里插入图片描述

● 96.不同的二叉搜索树

题目描述

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

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 19

解题思路

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

结果

在这里插入图片描述

【WorkBuddy专栏58】腾讯为什么要「自己打自己」——7款AI智能体产品全景对比与「赛马」逻辑深度拆解 【WorkBuddy专栏57】你的左侧空间不是「日任务清单」——工作空间才是 WB 变聪明的核心秘密 阅读详情

相关推荐

手把手教你用MATLAB/Simulink模拟微电网潮流方向(附代码下载)

本文提供了一份详细的MATLAB/Simulink微电网潮流仿真实战指南。通过手把手教学,指导读者从零搭建包含光伏、储能和负荷的微电网模型,并模拟并网、孤岛等多种运行场景下的潮流方向变化。文章核心在于利用Simulink实现微电网的动态潮流分析与可视化,帮助工程师深入理解分布式能源系统中的功率平衡与控制策略。

weixin_28314575的博客 106

代码随想录算法训练营Day 41| 动态规划part03 | 343. 整数拆分、96.不同的二叉搜索树

【代码】代码随想录算法训练营Day 41| 动态规划part03 | 343. 整数拆分、96.不同的二叉搜索树。

m0_51759998的博客 1795

【强化学习】强化学习中,训练过程的稳定性是什么?该如何进行衡量?请详细进行解释

在强化学习中,训练过程的稳定性指的是算法在训练过程中表现出一致的行为,并且能够稳定地收敛到一个好的策略。收敛性:算法是否能够在有限的时间内收敛到一个近似最优的策略。鲁棒性:算法在不同的初始条件或环境扰动下的表现是否稳定。方差:算法在多次运行中表现出的变异程度。稳定的训练过程意味着算法的训练曲线平滑奖励信号变化小,且策略或价值函数的变化是渐进的。

wq6qeg88的博客 1629

Day 41 343.整数拆分 96.不同的二叉搜索树

​ 从递归公式上来讲,dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量] 中以j为头结点左子树节点数量为0,也需要dp[以j为头结点左子树节点数量] = 1, 否则乘法的结果就都为0;​ 那么思路就明了了,对于n > 4的情况,尽可能的将数分解为3的和,递推公式即为dp[i] = dp[i - 3] *3;​ 所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2];​ 当①为头节点时,其右子树的布局和n= 2的情况类似;

qq_46025584的博客 1073

【硬核指南/MI50 32G/Ubuntu】从零部署大模型:MI50显卡Ubuntu系统驱动安装与避坑全记录

本文详细记录了在Ubuntu系统上为AMD MI50显卡安装驱动并部署大模型的完整流程,包括硬件兼容性检查、BIOS关键设置、系统安装优化、ROCm驱动安装及常见问题解决方案。特别针对MI50显卡在X99平台上的特殊配置需求提供了实用技巧,帮助用户避免常见陷阱,提升大模型训练效率。

weixin_42520909的博客 806

告别反复格式化!用Ventoy制作2025年终极启动盘,Windows/Linux/macOS一网打尽

本文详细介绍了如何使用Ventoy制作2025年终极多系统启动盘,彻底告别反复格式化U盘的烦恼。Ventoy通过创新的引导加载器架构,允许用户在一个U盘内同时存放并直接启动Windows、Linux、macOS等多种系统镜像和WePE等维护工具,实现真正的非破坏性管理和极高的U盘利用率。文章涵盖从安装配置、镜像库构建到安全启动设置等全流程实战指南。

weixin_29280219的博客 241

刷题DAY41 | LeetCode 343-整数拆分 96-不同的二叉搜索树

那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。从递归公式上来讲,dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量] 中以j为头结点左子树节点数量为0,也需要dp[以j为头结点左子树节点数量] = 1, 否则乘法的结果就都变成0了。j的结束条件是 j < i - 1 ,其实 j < i 也是可以的,不过可以节省一步,例如让j = i - 1,的话,其实在 j = 1的时候,这一步就已经拆出来了,重复计算,所以 j < i - 1。

wangs29的博客 869

【CANoe16安装教程】亲测安装成功

CANoe16安装教程

qq_45302638的博客 2万+

代码随想录算法训练营DAY40\DAY41|C++动态规划Part.3|343.整数拆分、96.不同的二叉搜索树

本题我们用的是一种近似数学归纳法的推理。在LeetCode官解中,给出了严格的数学证明,我认为这样的思考过程也是非常需要了解的。LeetCode官解(必须手推一下!也不难!卡塔兰数往往解决以下几类问题:有效的括号组合的数量。不同的二叉搜索树的数量。凸多边形划分成三角形的方法数量。在一个正方形格子图中从一角到另一角的路径数量,这些路径仅向上或向右移动,并且不越过对角线。递推公式C01Cn122n1n2CnC0​1Cn1​n222n1。

糖炒栗子 988

使用Simulink进行无刷电机霍尔传感器信号处理电路的仿真

位置检测:霍尔传感器可以检测转子的位置,这对于实现无刷电机的电子换向至关重要。提高效率:通过准确的位置信息,可以优化电机的工作状态,提高效率和性能。通过上述步骤,我们简要介绍了如何基于Simulink实现无刷电机霍尔传感器信号处理电路的仿真。

MHD0815的博客 430

【深度学习新浪潮】如何上手DINO v3:Meta新一代视觉大模型实战指南

自定义数据集类(适配本地/公开数据集)# 去除batch维度# 构建数据加载器# 定义分类模型(冻结预训练层,仅训练分类头)self.classifier = nn.Linear(dino_model.config.hidden_size, num_classes) # 分类头global_feat = outputs.global_attention_pool # 取全局特征# 初始化模型# 冻结预训练层(仅训练分类头)# 定义损失函数和优化器。

专注:太空算力、AI infra、异构调度、大模型成本工程 491

代码随想录刷题笔记 DAY 41 | 整数拆分 No.343 | 不同的二叉搜索树 No.96

这其实就是第二种情况的最优解,因为此时可以保证拆分出来之后乘积达到最大。数组中取出的,所以如果没有思路或者考虑递归的时候可以先从。完全相同的结构,将这个结构作为左子树;解释: 2 = 1 + 1, 1 × 1 = 1。的时候构成二叉树的结构,那是不是可以这样表示呢?的最大值,那如果是以上的情况其实就默认拆分成。返回满足题意的二叉搜索树的种数。个节点组成的不同的二叉搜索树有多少种。💡 这里说的相同的结构上的相同,指的是。

kkq的博客 983

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

算法Day41 | 343. 整数拆分,96.不同的二叉搜索树

zsbd

雨后的放线君 438

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

DUM1615的博客 326

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

代码随想录Day41 | 343.整数拆分、96.不同的二叉搜索树

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

weixin_46620779的博客 905

【力扣一刷】代码随想录day41(动态规划part3:343. 整数拆分、96.不同的二叉搜索树 )

中等题(需要仔细推理过程)dp(i)就是将 i 拆分为 k 个正整数的和( k >= 2 ),k个整数乘积的最大值。对于 n 而言,需要分 1~n/2 种情况讨论,用 j 代替其中一种那么,j = 1时,剩余的和为n-1,只要比较 1 × dp(n-1) 和 1 × (n-1)哪个更大,即可得到将n拆分为正整数后一定包含正整数1的乘积最大值。以此类推,直至 j = n/2,遍历所有 j 的情况后统计乘积最大值,即可得到dp(n)。

weixin_46135891的博客 639

代码随想录day41|343. 整数拆分|96.不同的二叉搜索树|Golang

笔记

weixin_42161901的博客 481

代码随想录算法训练营三刷day41 | 动态规划之 343. 整数拆分 96.不同的二叉搜索树

从递归公式上来讲,dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量] 中以j为头结点左子树节点数量为0,也需要dp[以j为头结点左子树节点数量] = 1, 否则乘法的结果就都变成0了。j的结束条件是 j < i - 1 ,其实 j < i 也是可以的,不过可以节省一步,例如让j = i - 1,的话,其实在 j = 1的时候,这一步就已经拆出来了,重复计算,所以 j < i - 1。,就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。

baimaozi_007的博客 733

代码随想录算法训练营Day41|343. 整数拆分、96.不同的二叉搜索树

本题要使得整数拆分后的乘积最大,使用动态规划求解难在递推公式的推导。本题使用动态规划求解时依然难在递推公式的求解,可以先举几个例子,画画图,从中查找规律。今天的动态规划题难在递推公式的推导,当递推公式较难想时,可以通过举例的方式观察规律。

m0_68682181的博客 1069

day 41:343. 整数拆分;96.不同的二叉搜索树

首先一定是遍历节点数,从递归公式:dp[i] += dp[j - 1] * dp[i - j]可以看出,节点数为i的状态是依靠 i之前节点数的状态。所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。元素3为头结点搜索树的数量 =左子树有2个元素的数量*右子树有0个元素的数量。dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。

m0_63789329的博客 433

算法训练营DAY41|343. 整数拆分、96.不同的二叉搜索树

leetcode343. 整数拆分、96.不同的二叉搜索树

weixin_59867637的博客 319

算法训练 Day41 | 动态规划训练Day3;LeetCode343. 整数拆分;LeetCode96. 不同的二叉搜索树

算法训练 Day41 | 动态规划训练Day3;LeetCode343. 整数拆分;LeetCode96. 不同的二叉搜索树

weixin_47284299的博客 765

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

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

东东唯一指定铲屎官 1066

Day41|leetcode 343. 整数拆分、96.不同的二叉搜索树

给定一个正整数n,将其拆分为k个正整数的和(k >= 2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。示例 1:输入:n = 2输出:1解释:示例 2:输入:n = 10输出:36解释:给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。示例 1:n = 35示例 2:n = 11。

m0_74583479的博客 291

代码随想录Day41 | 343. 整数拆分 96.不同的二叉搜索树

Day41

sRiddle的博客 547

代码随想Day41 | 343. 整数拆分、96.不同的二叉搜索树

从1遍历j,然后有两种渠道得到dp[i],一个是j * (i - j) 直接相乘,一个是j * dp[i - j],相当于是拆分(i - j)。j怎么就不拆分呢?j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了。那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。所以递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j))。其余步骤省略~详细代码如下:

juantingliu_01的博客 729
上一篇: 刷题记录|Day39 动态规划part02 ● 62.不同路径 ● 63. 不同路径 II
下一篇: 使用conda将Windows下的机器学习环境迁移到Linux
null_one
博客等级 码龄8年 847粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值