当前位置: 首页 > news >正文

代码随想录36 动态规划

leetcode 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。

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.不同的搜索树

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

复习一下搜索树的概念:

二叉树的种类:

1.满二叉树

2.完全二叉树

满二叉树是完全二叉树

3.二叉搜索树:左子树都小于中间结点,右子树都大于中间结点,找元素时间复杂度为O(logn)

4.平衡二叉搜索树:左子树和右子树的高度差不大于1

map和set容器里面的元素都是有序的,因为它的底层实现是平衡二叉搜索树

思路:

dp数组的含义:dp[i]表示以i为头结点有多少种表示方式

j从0开始遍历到i

递推公式:dp[i]+=dp[j]+dp[i-j]

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];}
};

http://www.lryc.cn/news/531836.html

相关文章:

  • 离散时间傅里叶变换(DTFT)公式详解:周期性与连续性剖析
  • 深度学习|表示学习|卷积神经网络|Batch Normalization在干什么?|19
  • Go基础之环境搭建
  • echarts、canvas这种渲染耗时的工作能不能放在webworker中做?
  • Android学习21 -- launcher
  • antd pro框架,使用antd组件修改组件样式
  • 响应式编程_05 Project Reactor 框架
  • RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)
  • 导出依赖的几种方法
  • CS 与 BS 架构的差异
  • OpenCV YOLOv11实时视频车辆计数线:让车辆进出有条理!
  • 配置@别名路径,把@/ 解析为 src/
  • java 进阶教程_Java进阶教程 第2版
  • Windows Docker笔记-安装docker
  • hot100(7)
  • DeepSeek辅助学术写作【对比概念】效果如何?
  • 基础相对薄弱怎么考研
  • kakailio官网推荐的安装流程ubuntu 22.04
  • DeepSeek:全栈开发者视角下的AI革命者
  • 协同探索与导航文献整理
  • C#结合html2canvas生成切割图片并导出到PDF
  • AI安全最佳实践:AI云原生开发安全评估矩阵(上)
  • [ Spring ] Spring Boot Mybatis++ 2025
  • JAVAweb学习日记(九) MySQL-事务索引
  • 企业加密软件(天锐绿盾)
  • Python实现监督学习与无监督学习
  • Python网络自动化运维---批量登录设备
  • 如何抓取酒店列表: 揭开秘密
  • day32-文件共享服务ftp与smb
  • 快速傅里叶离散变换FFT (更新中)