训练营第三十七天动态规划(基础题part3)

训练营第三十七天动态规划(基础题part3)

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

解答

五部曲

  1. 确定dp数组 分拆数字i,可以得到的最大乘积为dp[i]。
  2. 确定数组初始化 dp[2] = 1
  3. 确定赋值规律 dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j})
    1. 需要对dp【i】也进行比较是因为每次拆分都会更新dp[i],dp[i]并不是一成不变的
    2. (i - j) * j表示将数才成两个,一个为j,一个为i-j
    3. dp[i - j] * j表示将数拆分出一个j后,对剩余的i-j再进行拆分找最大值,即dp[i - j]
  4. 确定遍历顺序 dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历,先有dp[i - j]再有dp[i]。
  5. 模拟验证

在这里插入图片描述

class Solution {
    public int integerBreak(int n) {
		int[] dp = new int[n + 1];//存放对索引进行拆分的最大值,不管分几个
		dp[2] = 1;
		for (int i = 3; i < n + 1; i++) {
			for (int j = 1; j < i; j++) {
				dp[i] = Math.max(dp[i],Math.max(j * (i - j),j * dp[i - j]));
			}
		}
		return dp[n];
    }
}

对遍历进行优化(没懂)

class Solution {
    public int integerBreak(int n) {
		int[] dp = new int[n + 1];//存放对索引进行拆分的最大值,不管分几个
		dp[2] = 1;
		for (int i = 3; i < n + 1; 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.不同的二叉搜索树

力扣题目链接

题目

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

示例 1:

在这里插入图片描述

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 19

解答

五部曲

  1. 确定dp dp[i]表示 1到i为节点组成的二叉搜索树的个数为dp[i]

  2. 确定规则

    • 在这里插入图片描述

    • 对于dp[3],分别以j = 1 2 3为头结点进行加和

      • j = 1为头结点,那么左子树有dp[0]种方案,右子树有dp[2]种方案,总方案为dp[0] * dp[2](索引为结点的个数,即j = 1左子树应该有0个结点,右子树应该有两个结点)
      • 同理 j = 2为头结点,那么左子树有dp[1]种方案,右子树有dp[1]种方案,总方案为dp[1] * dp[1]
      • j = 3为头结点,那么左子树有dp[2]种方案,右子树有dp[0]种方案,总方案为dp[2] * dp[0]
      • dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2] =》 dp[i] += dp[j - 1] * dp[i - j]; j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量
  3. 初始化:dp[0] = 1(因为是乘法)

  4. 遍历顺序:从左到右

    • for (int i = 1; i <= n; i++) {
          for (int j = 1; j <= i; j++) {
              dp[i] += dp[j - 1] * dp[i - j];
          }
      }
      
  5. 验证

    在这里插入图片描述

class Solution {
    public int numTrees(int n) {
		int[] dp = new int[n + 1];
		dp[0] = 1;
		for (int i = 1; i < n + 1; i++) {
			for (int j = 1; j <= i; j++) {//j为当前头结点
				dp[i] += dp[j - 1] * dp[i - j];
			}
		}
		return dp[n];
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章 学会Qt 样式表(qss)

QML 中风格和主题的设计可以通过配置文件选择现有几种中的一种&#xff0c;或者直接在控件定义时&#xff0c;指定其属性&#xff0c;如背景颜色或者字体大小。在QWidget框架中&#xff0c;则通过了一种叫做qss样式表的东西来进行描述&#xff0c;跟CSS逻辑上类似。 这个qss抽…

【Redis 开发】多级缓存,本地进程缓存Caffeine

多级缓存 多级缓存本地进程缓存CaffeineCaffeine三种缓存驱逐策略 多级缓存 Redis处理并发的能力是非常强大的&#xff0c;但是tomcat的支持并发的能力跟不上Redis的性能&#xff0c;导致整体性能的下降 Redis缓存失效时&#xff0c;会对数据库产生冲击&#xff0c;之间再无屏…

自动驾驶横向控制算法

本文内容来源是B站——忠厚老实的老王&#xff0c;侵删。 三个坐标系和一些有关的物理量 使用 frenet坐标系可以实现将车辆纵向控制和横向控制解耦&#xff0c;将其分开控制。使用右手系来进行学习。 一些有关物理量的基本概念&#xff1a; 运动学方程 建立微分方程 主要是弄…

软件测试之学习及复习面试路线汇总

对于很多想通过自学或面试复习软件测试的同学&#xff0c;痛点并不是学习动力&#xff0c;而是找不到清晰的学习思路。 熬夜3天&#xff0c;吐血整理了这份《软件测试学习路线》&#xff0c;全文接近6000字&#xff0c;请大家耐心看完&#xff01; 软件测试职业成长图 第一阶…

数字信号的产生与检测——DSP学习笔记六

本专栏的博客的图片大部分来源于老师的PPT&#xff0c;本博客只是博主对于上课内容的知识结构的分析和梳理。 几种数字信号的产生 正弦波信号 多项式逼近(除了泰勒展开&#xff0c;还有一种方法是切比雪夫逼近法&#xff0c;感兴趣可以自己去了解一下&#xff09; 查找表 核心思…

HDFS分布式文件存储系统

1-1 HDFS的存储机制 按块&#xff08;block&#xff09;存储 hdfs在对文件数据进行存储时&#xff0c;默认是按照128M(包含)大小进行文件数据拆分&#xff0c;将不同拆分的块数据存储在不同datanode服务器上 拆分后的块数据会被分别存储在不同的服务器上 副本机制 为了保证hdfs…

python环境安装jupyter

安装完毕之后下一步可以参考&#xff1a;配置jupyter的启动路径-CSDN博客 1 前提条件&#xff1a;python环境 系统&#xff1a;win10 python&#xff1a;本地已经有python&#xff0c;可以查看本地的python版本&#xff1a; C:\Users\PC>python --version Python 3.8.10 …

腾讯企点点击网址系统默认Google浏览器无法打开

最近更新了Chrome&#xff0c;企点里的信息无法自动完成链接跳转。 但是无法看卡在哪里。用了同事推荐的方法。把默认应用改成其他浏览器先测试。 其他浏览器没有问题&#xff0c;那就是Google浏览器有问题。尝试直接到软件目录双击打开。会弹出用户账户控制界面&#xff0c;询…

解决Blender导出FBX文件到Unity坐标轴错误的问题

发现Blender的模型导入到Unity里面有问题,简单研究了下发现是坐标系不同,Unity使用的是左手坐标系,Blender使用的是右手坐标系 。 下面直接将如何解决 首先忽略Blender的右手坐标系以及Z轴朝上的事&#xff0c;依照unity坐标系情况修改模型物体的旋转&#xff0c;以Blender猴…

Hystrix断路器

Hystrix断路器 概述分布式系统面临的问题什么是Hystrix 服务熔断什么是服务熔断添加方法 服务降级什么是服务降级实现方法 服务监控hystrixDashboard 概述 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候不可避免地…

Python网络数据抓取(3):Beautiful Soup

Beautiful Soup 这个库通常被称为Beautiful Soup 4&#xff08;BS4&#xff09;。它主要用来从HTML或XML文件中抓取数据。此外&#xff0c;它也用于查询和修改HTML或XML文档中的数据。 现在&#xff0c;让我们来了解如何使用Beautiful Soup 4。我们将采用上一节中使用的HTML数据…

【优质书籍推荐】ChatGLM3大模型本地化部署、应用开发与微调

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

Latex入门教学——常用语句介绍

目录 一、导言 二、正文 三、图片 四、公式 五、表格 六、参考文献 LaTex模板下载 IEEE模板&#xff1a;IEEE Article Templates - IEEE Author Center Journals通用模板&#xff1a;Overleaf, Online LaTeX Editor其他方法&#xff1a;百度&#xff0c;CSDN等。 一、导…

华为校招机试 - 满二叉搜索树查找(20240424)

在线OJ测试 题目详情 - 满二叉搜索树查找 - HydroOJ 题目描述 给定 (2^n) - 1 个不同的整数(1 ≤ n ≤ 10,n 为整数),构建一棵平衡满二叉搜索树。 二叉搜索树定义如下: 节点的左子树只包含小于当前节点的数节点的右子树只包含大于当前节点的数所有左子树和右子树自身必…

为什么有些3D模型导入总是渲染不出来?---模大狮模型网

在使用3D建模软件时&#xff0c;有时候会遇到一些导入模型后无法正确渲染的问题&#xff0c;这给用户带来了不便和困扰。本文将探讨一些可能导致3D模型无法渲染的原因&#xff0c;并提供解决方案&#xff0c;帮助您顺利渲染模型。 一、文件格式不兼容某些3D建模软件只支持特定的…

SDA616 600KHz、16V、2A同步降压转换器

一般说明 该SDA616是一个完全集成&#xff0c;高效率2A同步整流降压转换器。该SDA616工作在一个宽的输 出电流负载范围高效率。该器件提供两种工作模式&#xff0c;PWM控制和PFM模式开关控制&#xff0c;它允许在更宽的负载范围内的高效率。 该SDA616需要一个现…

电脑开机后卡在开机LOGO画面如何排查处理

当电脑开机后长时间停滞在开机LOGO画面,无法继续进入操作系统,这一现象常令用户困扰不已。本文将深入探讨导致此类问题的多种可能原因,并提供相应的解决方法,帮助你有效地诊断和排除故障。 硬件故障或接触不良 1. 硬盘问题:硬盘是系统启动的关键组件,其故障或数据线接触…

RAG Survey

本文翻译自&#xff1a;Retrieval-Augmented Generation for Large Language Models: A Survey https://arxiv.org/pdf/2312.10997 文章目录 摘要一、INTRODUCTION二、RAG概述A. Naive RAGB. Advanced RAGC. Modular RAGD. RAG与微调 三、 检索A. 检索来源1&#xff09; 数据结…

Qt客服端开发的组件库

Qt 是一个功能丰富的跨平台 C 应用程序框架&#xff0c;它包含了许多用于不同目的的组件库。以下是一些主要的 Qt 组件库&#xff0c;这些库为开发者提供了广泛的工具和功能&#xff0c;以便构建复杂的应用程序。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&a…

短信接口如何快速对接

短信大家都不陌生&#xff0c;基本上我们每天都会收到各种各样的短信&#xff0c;内容有些是营销类的&#xff0c;有些是数字验证码&#xff0c;有些是快递取件码类似的通知短信&#xff0c;这些短信内容都是通过短信接口触发来进行发送的&#xff0c;那么你知道短信接口如何快…