LeetCode刷题笔记【31】:动态规划专题-3(整数拆分、不同的二叉搜索树)

文章目录

  • 前置知识
  • 343. 整数拆分
    • 题目描述
    • 解题思路
    • 代码
    • 进一步优化
  • 96.不同的二叉搜索树
    • 题目描述
    • 解题思路
    • 代码
    • 优化改进
  • 总结

前置知识

参考前文

参考文章:
LeetCode刷题笔记【29】:动态规划专题-1(斐波那契数、爬楼梯、使用最小花费爬楼梯)
LeetCode刷题笔记【30】:动态规划专题-2(不同路径、不同路径 II)

343. 整数拆分

题目描述

截图

LeetCode链接:https://leetcode.cn/problems/integer-break/description/

解题思路

思路: 动态规划
建立dp数组, 表示下标i的最大乘积
对每个新的i, 将i分成(i=x+y), dp[i] = max(dp[x], x) * max(dp[y], y);

代码

class Solution {
public:int integerBreak(int n) {vector<int> dp(n+1, INT_MIN);dp[0] = 0;dp[1] = 0;dp[2] = 1;if(n<=2)return dp[n];for(int i=3; i<=n; ++i){for(int x=1; x<=i/2; ++x){int y = i-x;dp[i] = max(dp[i], max(dp[x], x) * max(dp[y], y));}}return dp[n];}
};

进一步优化

可以将递推构建dp数组的过程进一步简化为以下形式
效率会更高, 但是理解起来困难一些, 也不容易想到

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

96.不同的二叉搜索树

题目描述

截图

LeetCode链接:https://leetcode.cn/problems/unique-binary-search-trees/description/

解题思路

动态规划
dp数组中dp[i]表示有i个节点的时候有dp[i]种搜素树
dp[0]=0, dp[1]=1, dp[2]=2
dp[i]的时候, 用j遍历1到i, dp[i] += dp[j-1] * dp[i-j];
在这里插入图片描述

代码

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

优化改进

不用初始化到2, 到1就行了

class Solution {
public:int numTrees(int n) {vector<int> dp(n+1,0);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];}
};

总结

很多动态规划题目, 因为涉及到递推, 前后数值的查询, 所以直接脑中空想比较困难;
想不清楚的时候最好动笔写写画画, 思路会清晰很多.

本文参考:
整数拆分
不同的二叉搜索树

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

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

相关文章

召回和排序的样本构造问题

精排 正样本&#xff1a;曝光点击负样本&#xff1a;曝光未点击 粗排 正样本&#xff1a;曝光点击负样本&#xff1a;如果只复用精排的负样本&#xff0c;粗排模型对精排模型的拟合就会出现比较大的偏差。因为粗排打分高的item可能会被精排打低分&#xff0c;导致不能下发曝…

算法笔记——循环链表

带环链表 算法题中&#xff0c;会有一种题目让我们去判断链表里的是否有循环。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 这里就需要我们要用快慢指针来进行搜索&#xff0c;直接提供代码 class Solution { public:bool hasCycle(ListNode *…

openwrt上/etc/localtime报错问题解决

笔者在openwrt上使用docker 搭建为知笔记服务端的时候碰到了/etc/localtime报错问题&#xff0c;解决过程记录如下: docker构建命令如下 docker run --name wiz --restartalways -it -d \ -v /opt/wizdata:/wiz/storage \ -v /etc/localtime:/etc/localtime \ -p 8666:80 \ -p…

Qt开发 入门

1.Qt概述 什么是Qt 不论我们学习什么样的知识点首先第一步都需要搞明白它是什么&#xff0c;这样才能明确当前学习的方向是否正确&#xff0c;下面给大家介绍一下什么是Qt。 Qt是一个跨平台的C应用程序开发框架 具有短平快的优秀特质: 投资少、周期短、见效快、效益高几乎支持…

VM-Linux基础操作命令

目录 基础知识&#xff1a; Linux的组成 命令执行的本质&#xff1a; 通配符&#xff1a; 终端 1.命令提示符 1.2.命令格式 例一&#xff1a;查看内核 例二&#xff1a; 查看内核版本 例三&#xff1a;查看shell类型 例四&#xff1a;查看IP地址 2.cd命令 3.查看帮…

蓝牙核心规范(V5.4)12.3-深入详解之LE GATT安全级别特征

蓝牙篇之蓝牙核心规范&#xff08;V5.4&#xff09;深入详解汇总 1.知识回顾 蓝牙协议GATT&#xff08;Generic Attribute Profile&#xff09;是蓝牙设备间进行数据交换的标准协议之一。GATT是一种基于服务&#xff08;Service&#xff09;和特性&#xff08;Characteristic&…

摩尔纹是什么?如何消除摩尔纹?

相信很多小伙伴在渲染的时候会遇到各种各样的问题&#xff0c;比如摩尔纹&#xff0c;一张图片如果出现摩尔纹那基本就没法用了。那摩尔纹是什么呢&#xff1f;为什么会出现摩尔纹&#xff1f;又要如何消除摩尔纹呢&#xff1f;这篇文章我们就来探讨下。 一、摩尔纹是什么 官方…

记LGSVL Map Annotation(2)导入点云、以及地图

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式&#xff08;PCD、PLY、LAS、LAZ&#xff09;转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口&#xff0c;请在 Unity 编辑器中打开模拟器项目&#xff0c;然后导航到 Simulator/Import Point Cloud…

抓拍摄像机开关量控制4K高清手机远程看图建筑生长定时缩时相机

作为物联网数据采集解决方案专业提供商,数采物联网小编daq-iot 在这里做以下内容介绍,并诚挚的欢迎大家讨论和交流。 项目案例参考视频&#xff1a; https://www.bilibili.com/video/BV1Kp4y1T7wQ/?spm_id_from333.999.0.0 4K高清太阳能供电定时拍照相机&#xff0c;通过光…

c语言每日一练(15)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;上学期间将看学业情况更新。 五道选择题&#xff1a; 1、程序运行的结果…

【python绘图—colorbar操作学习】

文章目录 Colorbar的作用Colorbar的操作截取cmap拼接cmap双刻度列colorbar 引用 Colorbar的作用 Colorbar&#xff08;颜色条&#xff09;在绘图中的作用非常重要&#xff0c;它主要用于以下几个方面&#xff1a; 表示数据范围&#xff1a; Colorbar可以显示图中的颜色映射范围…

JS装饰器的介绍

装饰器的基本介绍 装饰器是一种特殊类型的声明&#xff0c;它能够被附加到类声明&#xff0c;方法&#xff0c;访问符&#xff0c;属性或参数上。 装饰器使用expression这种形式&#xff0c;expression求值后必须为一个函数&#xff0c;它会在运行时被调用&#xff0c;被装饰的…

嵌入式Linux驱动开发(I2C专题)(五)

I2C系统驱动程序模型 参考资料&#xff1a; Linux内核文档: Documentation\i2c\instantiating-devices.rstDocumentation\i2c\writing-clients.rst Linux内核驱动程序示例: drivers/eeprom/at24.c 1. I2C驱动程序的层次 I2C Core就是I2C核心层&#xff0c;它的作用&#xf…

一同走进Linux的“基操”世界

一同走进Linux的“基操”世界 众所周知&#xff0c;Linux是一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发能力已经得到业界的认可&#xff0c;可以说&#xff0c;Linux现在就像是一个“当红明星”&#xff0c;其实力赢得了大多数人的赞同&#xff0c;流量…

C++红黑树

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解了红黑树并且使用红黑树模拟实现set和map 文章目录 红黑…

嵌入式学习笔记(25)串口通信的基本原理

三根通信线&#xff1a;Tx Rx GND &#xff08;1&#xff09;任何通信都要有信息作为传输载体&#xff0c;或者有线的或则无线的。 &#xff08;2&#xff09;串口通信时有线通信&#xff0c;是通过串口线来通信的。 &#xff08;3&#xff09;串口通信最少需要2根&#xff…

Flask 使用 JWT(一)

下面是一些 JWT 的使用场景: 1、 授权:这是 JWT 最常的使用场景。一旦用户登录,后续的每个请求都必须携带 JWT ,允许用户携带 Token 访问所有的路由、服务器和资源。单点登录时目前使用最广泛的一个场景,因为它开销小并且能够轻易的实现跨域访问。 2、信息交换:JWT Token…

什么是数据安全和数据加密的关键技术和算法

1、什么是数据安全和数据加密的关键技术和算法。 数据安全和数据加密是保障数据完整性和机密性的重要手段。以下是数据安全和数据加密的关键技术和算法&#xff1a; 散列函数&#xff08;Hash Function&#xff09;&#xff1a;散列函数是一种将任意长度的消息映射为固定长度…

【Python小练习】使用Python编写POC 脚本-上篇

文章目录 基本概念什么是Poc什么是Exp 常见问题Exp 和 Poc相同&#xff1f;为什么网上大多漏洞仅公开POC&#xff1f;为什么使用Python来编写 编写流程获取详情搭建环境复现漏洞编写脚本测试脚本 基本概念 什么是Poc Poc&#xff08;全称: Proof Of Concept&#xff09;, 中文…

conda与pip镜像源环境配置

文章目录 一. 参考二. conda三. pip 一. 参考 b站环境配置视频 校园网镜像站 二. conda 利用校园网镜像站, 找到conda的镜像源配置文档. 将下面的文档复制到电脑上的.condarc文件中. channels:- defaults show_channel_urls: true default_channels:- https://mirrors.tuna…