自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(176)
  • 收藏
  • 关注

原创 (已解决)遇到 undefined reference to pthread_getspecific问题

问题的原因:pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中函数的入口地址,于是链接会失败。遇到 `undefined reference to pthread_getspecific'`解决:在gcc编译的时候,附加要加 -lpthread参数即可解决。

2024-12-03 14:23:44 258

原创 详解http协议和https协议

HTTP(Hyper Text Transfer Protocol)协议又叫做超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上。在编写网络通信代码时,我们可以自己进行协议的定制,但实际有很多优秀的工程师早就已经写出了许多非常成熟的应用层协议,其中最典型的就是HTTP协议。http协议内容都是按照⽂本的⽅式明⽂进行传输,这就导致在传输过程中信息被轻易窃取、篡改。https协议属于应用层协议之一,是在http协议的基础上引⼊了⼀个加密层。

2024-02-29 11:17:57 795

原创 协议和序列化反序列化

协议”本身是一种约定俗成的东西,由通讯双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容我们把这个规矩叫做“协议”

2024-02-29 11:17:12 676

原创 详解UDP/TCP套接字

在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址。

2024-02-29 11:16:31 2101 3

原创 网络基础入门

独立模式: 计算机之间相互独立;网络互联: 多台计算机连接在一起, 完成数据共享计算机数量更多了, 通过交换机和路由器连接在一起 ,范围相比于广域网,范围较小,这个小范围可以具体是一个家庭、学校、公司。私网和内网通常也表示同样的概念,都指的是企业、学校或家庭等组织内部形成的局域网。将远隔千里的计算机都连在一起 所谓 “局域网” 和 “广域网” 只是一个相对的概念. 也可以看做一个比较大的局域网。Internet可以被看作是一个广域网。公网和外网通常是指同一个概念,它们可以被看作是广域网的一部分。

2024-02-29 11:14:05 430

原创 【Linux】基于单例模式懒汉实现方式的线程池

【代码】【Linux】基于单例模式懒汉实现方式的线程池。

2024-02-09 14:01:41 1105

原创 【Linux】信号量

只要我们对资源进行整体加锁就默认了我们对这个资源整体使用,实际情况可能存在一份公共资源,但是允许同时访问不同的区域!(程序员编码保证不同的线程可以并发访问公共资源的不同区域!信号量本质是一把计数器,衡量临界资源中资源数量多少的计数器只要拥有信号量,就在未来一定能够拥有临界资源的一部分,申请信号量的本质:对临界资源中特定小块资源的预定机制。比如电影院买票预定座位只要申请成功,就一定有你的资源,只要申请失败,就说明条件不就绪,你只能等,就不需要判断了。

2024-02-09 14:01:09 1194

原创 【Linux】生产者消费者模型

生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。

2024-02-09 13:59:30 1012

原创 【Linux】线程

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流我们来看看我们之前进程的结构:每个进程都有自己独立的进程地址空间和独立的页表,也就意味着所有进程在运行时本身就具有独立性。

2024-02-09 13:57:32 1142

原创 【Linux】进程信号

每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定 义 #defineSIGINT 2我们发现这里有62个信号,其中34以上的是实时信号,我们本章就只讨论31号信号以下的,不讨论实时信号,这些信号各自在什么条件下产生,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal。

2024-01-16 15:05:18 1235 5

原创 【算法小课堂】动态规划

动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从。我觉得,理解算法最重要的还是在于练习,只有通过自己练习,才可以更快地提升。话不多说,接下来,下面我就通过一个例子来一步一步讲解动态规划是怎样使用的,只有知道怎样使用,才能更好地理解,而不是一味地对概念和原理进行反复琢磨。

2024-01-09 12:02:22 1777 8

原创 进程间通信

管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道“我们之前说进程间通信的本质是让不同的进程看到同一份资源,管道就是其中的一种资源管道分为匿名管道和命名管道。

2024-01-08 13:39:32 1121 4

原创 cpServer.cc:10:5: error: ‘unique_ptr’ was not declared in this scope unique_ptr<TcpServer> tsvr

我在网上查询解决方案发现:shared_ptr 是C++11提供的一种智能指针类,它足够智能,可以在任何地方都不使用时自动删除相关指针,从而帮助彻底消除内存泄漏和悬空指针的问题。它遵循共享所有权的概念,即不同的 shared_ptr 对象可以与相同的指针相关联,并在内部使用引用计数机制来实现这一点。系统说不在这个作用域下,但是我明明应用了这个作用域的头文件。以下是我在make文件中出现的报错。

2024-01-04 15:26:36 754 5

原创 【算法挨揍日记】day46——377. 组合总和 Ⅳ\、96. 不同的二叉搜索树

⼀定要注意,我们的背包问题本质上求的是「组合」数问题,⽽这⼀道题求的是「排列数」问题。这道题属于「卡特兰数」的⼀个应⽤,同样能解决的问题还有「合法的进出栈序列」、「括号匹配。,我们根据「最后⼀个位置」划分,我们可以选择数组中的任意⼀个数。的个数的时候,当确定⼀个根节点之后,左右⼦树的结点「个数」的时候,表⽰⼀颗空树,「空树也是⼀颗⼆叉搜索树」,因此。的时候,我们可以什么都不选,「空集」⼀种⽅案,因此。号结点作为头结点的话,它的「左⼦树的种类」就有。号结点作为头结点的话,它的「右⼦树的种类」就有。

2024-01-03 12:02:57 1139 3

原创 【算法挨揍日记】day45——474. 一和零、879. 盈利计划

这道题⽬⾮常难读懂,但是如果结合例⼦多读⼏遍,你就会发现是⼀个经典的「⼆维费⽤的背包问。注意注意注意,这道题⾥⾯出现了⼀个「⾄少」,和我们之前做过的背包问题不⼀样。⽼规矩,根据「最后⼀个位置」的元素,结合题⽬的要求,我们有「选择」最后⼀个元素或者「不。在⼀些物品中「挑选」⼀些出来,然后在满⾜某个「限定条件」下,解决⼀些问题,⼤概率。状态转移⽅程分析⽅式,⼀般都是「根据最后⼀步」的状况,来分情况讨论。际情况来看,如果这个任务的利润已经能够达标了,我们仅需在之前的任务中,挑选出。但是问题来了,我们的。

2024-01-03 12:02:33 898

原创 【算法挨揍日记】day44——518. 零钱兑换 II、279. 完全平方数

这⾥给出⼀个⽤「拆分出相同⼦问题」的⽅式,定义⼀个状态表⽰。在⼀些物品中「挑选」⼀些出来,然后在满⾜某个「限定条件」下,解决⼀些问题,⼤概率。状态转移⽅程分析⽅式,⼀般都是「根据最后⼀步」的状况,来分情况讨论。由于每⼀个物品都是⽆限多个的,因此是⼀个「完全背包」问题。根据「状态转移⽅程」,我们仅需「从上往下」填表即可。,根据思路那⾥的分析我们知道,可以根据⼩于等于。接下来的分析就是基于「完全背包」的⽅式来的。的完全平⽅数的最少数量简称为「最⼩数量」。这个数,我们分析⼀下如何求它的最⼩数量。

2024-01-03 12:02:01 919

原创 【算法挨揍日记】day43——DP42 【模板】完全背包、322. 零钱兑换

当我们发现,计算⼀个状态的时候,需要⼀个循环才能搞定的时候,我们要想到去优化。向就是⽤⼀个或者两个状态来表⽰这⼀堆的状态,通常就是⽤数学的⽅式做⼀下等价替换。在⼀些物品中「挑选」⼀些出来,然后在满⾜某个「限定条件」下,解决⼀些问题,⼤概率。状态转移⽅程分析⽅式,⼀般都是根据最后⼀步的状况,来分情况讨论。状态转移⽅程分析⽅式,⼀般都是根据「最后⼀步」的状况,来分情况讨论。我们多加⼀⾏,⽅便我们的初始化,此时仅需将第⼀⾏初始化为。,因此,需要把第⼀⾏除了第⼀个位置的元素,都设置成⽆穷。

2024-01-03 12:01:34 1038

原创 【算法挨揍日记】day42——494. 目标和、1049. 最后一块石头的重量 II

1049. 最后一块石头的重量 II。

2024-01-03 12:00:53 1223

原创 【算法挨揍日记】day41——【模板】01背包、416. 分割等和子集

【模板】01背包_牛客题霸_牛客网你有一个背包,最多能容纳的体积是V。现在有n个物品,第i个物品的体积为 ,。题目来自【牛客题霸】

2024-01-03 12:00:22 929

原创 【算法挨揍日记】day40——712. 两个字符串的最小ASCII删除和、718. 最长重复子数组

⼦数组是数组中「连续」的⼀段,我们习惯上「以某⼀个位置为结尾」来研究。但也要注意「下标的映射」关系,以及⾥⾯的值要保证「后续填表是正确的」。根据「状态转移」,我们需要「从上往下」填每⼀⾏,每⼀⾏「从左往右」。第⼀⾏表⽰第⼀个数组为空,此时没有重复⼦数组,因此⾥⾯的值设置成。因此,我们的思路就是按照「最⻓公共⼦序列」的分析⽅式来分析。为了处理「越界」的情况,我们可以添加⼀⾏和⼀列,「从上往下」填每⼀⾏,每⼀⾏「从左往右」。引⼊空串后,⼤⼤的「⽅便我们的初始化」。共的 、⻓度最⻓的「⼦数组」的⻓度。

2024-01-03 11:56:52 1032

原创 【算法挨揍日记】day39——10. 正则表达式匹配、97. 交错字符串

优化:当我们发现,计算⼀个状态的时候,需要⼀个循环才能搞定的时候,我们要想到去优化。然后根据两个区间上「最后⼀个位置的字符」,来进⾏「分类讨论」,从⽽确定「状态转移。然后根据两个区间上「最后⼀个位置的字符」,来进⾏「分类讨论」,从⽽确定「状态转移。根据「状态转移」,我们需要「从上往下」填每⼀⾏,每⼀⾏「从左往右」。由于需要⽤到前⼀⾏和前⼀列的状态,我们初始化第⼀⾏、第⼀列即可。位置的值,因此需要初始化「第⼀个位置」以及「第⼀⾏」和「第⼀。最后⼀个位置的字符时,说明不可能是两者的交错字符串。

2024-01-03 11:56:19 860

原创 【算法挨揍日记】day38——115. 不同的子序列、44. 通配符匹配

优化:当我们发现,计算⼀个状态的时候,需要⼀个循环才能搞定的时候,我们要想到去优化。化的⽅向就是⽤⼀个或者两个状态来表⽰这⼀堆的状态。然后根据两个区间上「最后⼀个位置的字符」,来进⾏「分类讨论」,从⽽确定「状态转移。然后根据两个区间上「最后⼀个位置的字符」,来进⾏「分类讨论」,从⽽确定「状态转移。由于需要⽤到前⼀⾏和前⼀列的状态,我们初始化第⼀⾏、第⼀列即可。的⼦串中有⼀个空串和它⼀样,因此初始化第⼀⾏全部为。中的所有符合要求的⼦序列的后⾯,再加上⼀个字符。只能继承上个状态⾥⾯求得的⼦序列,

2024-01-03 11:55:53 934

原创 【算法挨揍日记】day37——1143. 最长公共子序列、1035. 不相交的线

是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。只不过是在整数数组中做⼀次「最⻓的公共⼦序列」,代码⼏乎⼀模⼀样,这⾥就不再赘述算法原。如果要保证两条直线不相交,那么我们「下⼀个连线」必须在「上⼀个连线」对应的两个元素的。我们要三者的最⼤值即可。⾯,但是我们求的是最⼤值,并不影响最终结果。但也要注意「下标的映射关系」,以及⾥⾯的值要「保证后续填表是正确的」。分析状态转移⽅程的经验就是根据「最后⼀个位置」的状况,分情况讨论。

2024-01-03 11:55:26 837

原创 【算法挨揍日记】day36——516. 最长回文子序列、1312. 让字符串成为回文串的最少插入次数

关于「单个字符串」问题中的「回⽂⼦序列」,或者「回⽂⼦串」,我们的状态表⽰研究的对象⼀。关于「回⽂⼦序列」和「回⽂⼦串」的分析⽅式,⼀般都是⽐较固定的,都是选择这段区域的「左。⽂串」,「⾸尾加上两个相同的元素之后也依旧是回⽂串」。关于「单个字符串」问题中的「回⽂⼦序列」,或者「回⽂⼦串」,我们的状态表⽰研究的对象⼀。关于「回⽂⼦序列」和「回⽂⼦串」的分析⽅式,⼀般都是⽐较固定的,都是选择这段区域的「左。⽂串」,「⾸尾加上两个相同的元素之后也依旧是回⽂串」。区间内的所有的⼦序列中,最⻓的回⽂⼦序列的⻓度。

2024-01-03 11:54:47 891

原创 【算法挨揍日记】day35——1745. 分割回文串 IV、132. 分割回文串 II

在647题的基础上, 我们从后向前遍历dp表中所有为true的情况,看否可以将他们分为3段。优化:我们在状态转移⽅程⾥⾯分析到,要能够快速判读字符串⾥⾯的⼦串是否回⽂。我们先把表⾥⾯的值初始化为「⽆穷⼤」。区间上的字符串已经是回⽂串了,最⼩的回⽂串就是。由于我们要的是最⼩值,因此应该循环遍历⼀遍。位置上的⼦串能够构成⼀个回⽂串,那么。位置上的⼦串不能构成⼀个回⽂串,此时。表,⾥⾯保存所有⼦串是否回⽂的信息。区间上的字符串,最少分割的次数。间上最少回⽂串的个数 + 1,即。的取值,拿到⾥⾯的最⼩值即可。

2024-01-03 11:53:55 967

原创 【算法挨揍日记】day34——647. 回文子串、5. 最长回文子串

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。根据「状态转移⽅程」,我们需要「从下往上」填写每⼀⾏,每⼀⾏的顺序⽆所谓。我们可以先「预处理」⼀下,将所有⼦串「是否回⽂」的信息统计在。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。因为我们的状态转移⽅程分析的很细致,因此⽆需初始化。为了能表⽰出来所有的⼦串,我们可以创建⼀个。是字符串中的由连续字符组成的一个序列。的时候:不可能是回⽂串,的⼦串,是否是回⽂串。:此时也⼀定是回⽂串,:此时⼀定是回⽂串,

2024-01-03 11:49:31 944

原创 【算法挨揍日记】day33——1027. 最长等差数列、446. 等差数列划分 II - 子序列

根据等差序列的特性,我们仅需知道序列⾥⾯的最后两个元素,就可以确定这个序列的样⼦。根据等差序列的特性,我们仅需知道序列⾥⾯的最后两个元素,就可以确定这个序列的样⼦。之前,放⼊哈希表中。我们⽆法推导状态转移⽅程,因此我们定义的状态表⽰需要能够确定⼀个等差序列。这种⽅式,我们仅需保存最近的元素的下标,不⽤保存下标数组。我们⽆法推导状态转移⽅程,因此我们定义的状态表⽰需要能够确定⼀个等差序列。位置元素为结尾的「所有⼦序列」中,最⻓的等差序列的⻓度。位置的元素为结尾的所有的⼦序列中,最⻓的等差序列的。

2023-11-24 15:36:20 3467 12

原创 【算法挨揍日记】day32——1218. 最长定差子序列、873. 最长的斐波那契子序列的长度

但是这⾥有⼀个⾮常致命的问题,那就是我们⽆法确定 i 结尾的斐波那契序列的样⼦。根据斐波那契数列的特性,我们仅需知道序列⾥⾯的最后两个元素,就可以确定这个序列的样⼦。中删掉任意数量的元素(也可以不删),而不改变其余元素的顺序。位置元素为结尾的「所有⼦序列」中,最⻓的斐波那契⼦数列的⻓度。中最长等差子序列的长度,该子序列中相邻元素之间的差等于。位置的元素为结尾所有的⼦序列中,最⻓的等差⼦序列的⻓度。前,将所有的「元素 + 下标」绑定在⼀起,放到哈希表中。位置的元素为结尾的所有的⼦序列中,最⻓的斐波那契⼦。

2023-11-24 15:14:26 939

原创 如何将vscode和Linux远程链接:

Remote - SSH - 远程登录Linux安装Remote - SSH我们下载完后,就会出现这些图标这里点一下+号查看一下我们的主机名,并复制输入这里是要将ssh这个文件要放在主机下的哪个路径下,选择第一个创建一个新的窗口第一次链接会出现这个,选择Linux就可以了然后继续,然后输入密码,这样他就会自己链接远程这样就是链接好了选择你的工作目录再次输入密码远程链接后,Linux中的配置文件会自动给vscode,因此会有语法补全的功能。

2023-11-19 11:31:48 2176 16

原创 【算法挨揍日记】day31——673. 最长递增子序列的个数、646. 最长数对链

这道题⽬让我们在数对数组中挑选出来⼀些数对,组成⼀个呈现上升形态的最⻓的数对链。我们整数数组中挑选⼀些数,让这些数组成⼀个最⻓的上升序列?为结尾的最⻓递增⼦序列的「⻓度」是多少,我怎么知道最⻓递增⼦序列的个数呢?在知道每⼀个位置结尾的最⻓递增⼦序列的⻓度时,我们来看看能否得到。为结尾的最⻓递增⼦序列的「个数」。,在累加的时候可能会把「不是最⼤⻓度的情况」累。因此我们解决问题的⽅向,应该在「最⻓递增⼦序。结尾的最⻓递增序列的⻓度时,我们已经知道。位置的数对为结尾时,最⻓数对链的⻓度。

2023-11-19 10:01:49 330

原创 【算法挨揍日记】day30——300. 最长递增子序列、376. 摆动序列

从之前的状态推导出来。因为我们不知道前⼀个最⻓摆动序列的结尾处是递增的,还是递减的。此,我们需要状态表⽰能表⽰多⼀点的信息:要能让我们知道这⼀个最⻓摆动序列的结尾是递增的。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。位置元素为结尾的所有的⼦序列中,最后⼀个位置呈现「上升趋势」的最⻓摆。位置元素为结尾的所有的⼦序列中,最后⼀个位置呈现「下降趋势」的最⻓摆。表⾥⾯的最⼤值」,我们可以在填表的时候,顺便更新⼀个「最⼤值」。位置元素为结尾的「所有⼦序列」中,最⻓递增⼦序列的⻓度。

2023-11-19 10:00:57 273

原创 【算法挨揍日记】day29——139. 单词拆分、467. 环绕字符串中唯一的子字符串

可以在最前⾯加上⼀个「辅助结点」,帮助我们初始化。,为了确定当前的字符串能否由字典⾥⾯的单词构成,根据最后⼀个单词的起始位。表⾥⾯的和,因为会有重复的结果。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。样就没有下标的映射关系的问题了,同时还能处理「空串」的情况。中找到答案,后⾯部分的⼦串可以在字典⾥⾯找到。区间内的字符串,能否被字典中的单词拼接⽽成。可以根据「实际情况」,将表⾥⾯的值都初始化为。位置的元素为结尾的所有⼦串⾥⾯,有多少个在。值,我们仅需保留「最⼤」的即可,其余。

2023-11-19 10:00:10 334

原创 【算法挨揍日记】day28——413. 等差数列划分、978. 最长湍流子数组

所以说,我们定义的状态表⽰必须让等差数列「有迹可循」,让状。因此,我们可以「固定死等差数列的结尾」,定义下⾯的状态表。由于需要⽤到前两个位置的元素,但是前两个位置的元素⼜⽆法构成等差数列,因此。者⼜能构成⼀个新的等差数列,因此要在之前的基础上再添上⼀个等差数列,于是。由于我们的研究对象是「⼀段连续的区间」,如果我们状态表⽰定义成。因为我们要的是所有的等差数列的个数,因此需要返回整个。的状态转移时,会⽆从下⼿,因为我们不清楚前⾯那么多。位置的元素为结尾」的等差数列有多少种。为结尾的等差数列就不存在,此时。

2023-11-19 09:59:18 114

原创 【算法挨揍日记】day27——152. 乘积最大子数组、1567. 乘积为正数的最长子数组长度

这⾥的推导⽐较绕,因为不断的出现「正数和负数」的分情况讨论,我们只需根据下⾯的规则,严。表⽰「所有以 i 结尾的⼦数组,乘积为正数的最⻓⼦数组的⻓度」。为正数的最⻓⼦数组」,还需要⼀个「乘积为负数的最⻓⼦数组」。为结尾的所有⼦数组的最⼤乘积」,对于所有⼦数组,可以分为下。为结尾的所有⼦数组的最⼩乘积」,对于所有⼦数组,可以分为下。结尾的所有⼦数组中,乘积为「正数」的最⻓⼦数组的⻓度;结尾的所有⼦数组中,乘积为「负数」的最⻓⼦数组的⻓度。为结尾的所有⼦数组,乘积为负数的最⻓⼦数组的⻓。

2023-11-19 09:58:30 152

原创 【算法挨揍日记】day26——53. 最大子数组和、918. 环形子数组的最大和

本题与「最⼤⼦数组和」的区别在于,考虑问题的时候不仅要分析「数组内的连续区域」,还要考。但是,由于数组内有可能全部都是负数,第⼀种情况下的结果是数组内的最⼤值(是个负数),第。由于「最⼤⼦数组和」的⽅法已经讲过,这⾥只提⼀下「最⼩⼦数组和」的求解过程,其实与「最。其中,对于第⼀种情况,我们仅需按照「最⼤⼦数组和」的求法就可以得到结果,记为。如果数组⾸尾相连的⼀部分是最⼤的数组和,那么数组中间就会空出来⼀部分;是不变的,那么中间连续的⼀部分的和⼀定是最⼩的;两种情况下的最⼤值,就是我们要的结果。

2023-11-19 09:57:37 132

原创 【算法挨揍日记】day25——123. 买卖股票的最佳时机 III、188. 买卖股票的最佳时机 IV

f[i][j]表示第i天结束后,完成了j次交易后处于可交易状态下的最大利润。f[i][j]表示第i天结束后,完成了j次交易后处于买入状态下的最大利润。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。设计一个算法来计算你所能获取的最大利润。设计一个算法来计算你所能获取的最大利润。也就是说,你最多可以买。个元素是一支给定的股票在第。返回值,最后一行的最大值。是某支给定的股票在第。给定一个数组,它的第。

2023-11-19 09:56:30 72

原创 【算法挨揍日记】day24——309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费

天不在冷冻期的时候买⼊,由于买⼊需要花 钱,所以此时最⼤收益为: dp[i - 1][1] - prices[i] 两种情况应取最⼤值,因此: dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])。处于「买⼊」状态的时候,我们现在有股票,此时不能买股票,只能继续持有股票,或者卖。:此时要想处于「买⼊」状态,必须把第⼀天的股票买了,因此。天结束后,处于「冷冻期」状态,此时的最⼤利润。天结束后,处于「买⼊」状态,此时的最⼤利润;

2023-11-19 09:55:44 90

原创 【算法挨揍日记】day23——740. 删除并获得点数、LCR 091. 粉刷房子

当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。返回值:min(min(f[n-1],g[n-1]),v[n-1]);f[i],g[i]表示以i为结尾,i位置选和i位置不选的最大点数。f[i]表示以i位置为结尾,选择红色(第一个)的最小金额。v[i]表示以i位置为结尾,选择绿色(第3个)的最小金额。表示第 1 号房子粉刷成绿色的花费,以此类推。

2023-11-19 09:54:44 102

原创 【算法挨揍日记】day22——面试题 17.16. 按摩师、213. 打家劫舍 II

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。同时,相邻的房屋装有相互连通的防盗系统,状态表示:f[i],g[i]表示以i为结尾,i预约和i不预约的最长的预约时长。f[i],g[i]表示以i为结尾,i偷和i不偷的最大金额。返回值:max(f[n-1],g[n-1])返回值:max(f[n-1],g[n-1])本题相对原题稍作改动。

2023-11-19 09:53:57 134

原创 【算法挨揍日记】day21——64. 最小路径和、174. 地下城游戏

任何房间都可能对骑士的健康点数造成威胁,也可能增加骑士的健康点数,包括骑士进入的左上角房间以及公主被监禁的右下角房间。因此状态转移方程为:dp[i][j]=min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]这里值得注意的是dp【i】【j】可能为负数,因此要dp[i][j]=max(1,dp[i][j])初始化:dp[0][i]=INT_MAX,dp[i][0]=INT_MAX,dp[0][1]=0。当向下走的时候:x+dungeon[i][j]>=dp[i+1][j]

2023-11-19 09:53:04 169

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除