- 博客(3230)
- 收藏
- 关注
原创 【多线程】CSP模式
概念说明Channel独立的通信管道,连接多个进程有缓冲 Channel异步,缓冲满时阻塞发送者无缓冲 Channel同步,发送者等待接收者send()发送数据,可能阻塞recv()接收数据,可能阻塞close()关闭 Channel,不能再发送Pipeline多个阶段串联处理多个 worker 并行处理ActorCSP通信方式直接发给 Actor通过 Channel邮箱归属属于 Actor独立存在耦合度较高较低典型语言。
2025-12-29 21:36:20
242
原创 【多线程】Actor模式
问题答案Actor 是什么有自己线程和邮箱的对象,串行处理消息线程安全吗是,mailbox_ 被 mutex 保护如何停止发送一个设置 stop_=true 的消息。
2025-12-29 21:04:46
233
原创 【多线程】共享锁 Shared Lock
读写锁是一种特殊的锁,允许多个读者同时读取,但写者必须独占。普通互斥锁:│ 同一时间只能有一个线程(读或写) │读写锁:│ 读者1 读者2 读者3 ← 可以同时 ││ ││ 写者1 ← 必须独占(没有其他读/写)│概念说明readers_当前正在读的线程数writer_是否有线程正在写获取读锁,等待没有写者lock()获取写锁,等待没有读者和写者RAII构造时加锁,析构时解锁,防止忘记解锁概念说明等待中的写者数量,用于阻止新读者reader_cv_读者专用的条件变量writer_cv_
2025-12-29 13:45:11
125
原创 【多线程】单例模式 Singleton
单例模式看似简单,但要写好并不容易。需要考虑线程安全、初始化时机、生命周期管理等诸多问题。饿汉模式以简洁换取灵活性,懒汉模式以复杂性换取控制力。理解两者的优劣,才能在实际开发中做出正确的选择。public:// 类的静态成员变量要在类外面定义,但是也可以加上inline让它在类的内部定义。这里没有加inlineMain start!42Main end!return ptr;
2025-12-28 15:30:01
659
原创 【ACWing】157. 树形地铁系统
想象一下,你是一名在拥有树形地铁系统的城市游玩的游客,你想探索该城市完整的地铁线路。一个树的最小表示法是递归定义的,从树根开始,向下走,然后求每个子树的最小表示,然后将所有子树的最小表示排序,最后返回树根。之后,你以一种特殊的方式回忆自己的坐车过程,你将你的完整地铁乘坐路线编码为一个二进制字符串。的时候递归求解子树的最小表示法,直到所有子树遍历完毕,然后将子树的表示排序,最后总结为整个树的表示。对于每个测试用例,如果两个字符串描述的探索路线可以视为同一个地铁系统的两种探索路线,则输出。,代表测试用例数量。
2025-12-19 18:10:39
627
原创 【ACWing】162. 黑盒子
小的数),然后每次get的时候,直接输出小顶堆堆顶,然后把小顶堆最小值搬运到大顶堆即可。黑盒子代表一个原始的数据库。每次add的时候尽量把数放进小顶堆(因为之后get的时候是依次求第。:这个序列由加入到黑盒子内的所有元素按加入顺序排列后得到,上例中的。小的数,用一个小顶堆维护其余数,那么小顶堆的堆顶就是第。输出操作过程中所有 GET 操作输出的数值。次GET操作时,盒子内元素的数量。小的数值(即将所有数按升序排序后的第。求出操作过程中输出的所有数值。在最开始,黑盒子是空的,并且。现在请你根据给出的序列。
2025-12-19 17:53:26
869
原创 【ACWing】156. 矩阵
(这样哈希表里存的是unsigned long long类型,从而查询效率高),然后遍历原矩阵中所有的。,二维哈希可以这么做,每次先将每一行看成单独的一维字符串,算出每一行的哈希数组,设。那么对于整个矩阵的哈希值,我们可以将每一行的哈希值求出来,然后再将这么。具体到这道题,我们可以先将所有询问的矩阵的哈希值算出来,然后存进一个哈希表。的子矩阵,可以用滚动哈希的做法,先固定列,然后一行一行遍历,滚动哈希,当。里存在算出的哈希值的时候,就说明这个询问是存在的,我们就从。矩阵,求该矩阵是否在原矩阵中出现过。
2025-12-19 16:09:33
1146
原创 【ACWing】155. 内存分配
可以用一个平衡树存当前正在跑的进程占用的内存的左右端点,用一个堆按释放时间存所有正在跑的进程,为了找到将要释放的进程,我们可以将进程内存起点也存一下,做成pair然后进堆里;为了存等待队列,我们需要开一个队列,这个队列要存等待的进程需要的内存大小和运行时间。1、 内存以内存单元为基本单位,每个内存单元用一个固定的整数作为标识,称为地址。开始连续排列,地址相邻的内存单元被认为是逻辑上连续的。内存是计算机重要的资源之一,程序运行的过程中必须对内存进行分配。,但实际时间会很小,取决于内存使用情况,空间。
2025-12-19 14:57:25
573
原创 【Leetcode】1857. Largest Color Value in a Directed Graph
个顶点的无权有向图,每个顶点有个颜色。一条路径的颜色数定义为其所有顶点里,颜色使用频率最高的那个颜色的使用频率。问所有路径中,颜色数最大是多少。由于同一个路径,如果起点能延伸的话,对于每个颜色的频率都有可能增长,所以我们肯定希望路径越长越好。我们考虑用拓扑排序来做,在分层图上做递推,显然当。同时拓扑排序还需要记录有没有环。如果没有环的话,最终答案就是。
2025-12-19 01:45:01
869
原创 【Leetcode】1786. Number of Restricted Paths From First to Last Node
的最短路,可以用Dijkstra算法来做,以。可以用记忆化搜索来做。条边的无向非负权图,顶点编号为。可以求出最短距离,记为。
2025-12-18 21:38:19
791
原创 【ACWing】153. 双栈排序
是另外一个可行的操作序列。Tom希望知道其中字典序最小的操作序列是什么。否则输出字典序最小的操作序列,每两个操作之间用空格隔开,行尾没有空格。输出共一行,如果输入的排列不是”可双栈排序排列”,输出数字。Tom 最近在研究一个有趣的排序问题。当然,这样的操作序列有可能有几个,对于上例。个栈S1和S2,Tom希望借助以下。可以通过一系列操作使得输出序列为。种操作实现将输入序列升序排序。是一个”可双栈排序排列”。就是一个”可双栈排序序列”,而。个用空格隔开的正整数,构成一个。
2025-12-18 17:26:01
859
原创 【Leetcode】997. Find the Town Judge
再给定若干条连接两个点的有向边,题目保证不出现自环和平行边。如果存在,题目保证唯一。
2025-12-17 22:54:53
193
原创 【ACWing】151. 表达式计算4
(加 减 乘 整除 乘方)要求求出表达式的最终值。数据可能会出现括号情况,还有可能出现多余括号情况。可以用双栈的方法来做。数据保证指数运算不会连续出现,例如。数据保证不会出现指数为负数的情况。输出仅一行,既为表达式算出的结果。给出一个表达式,其中运算符仅包含。数据保证不会出现大于或等于。数据可能会出现负数情况。输入仅一行,即为表达式。
2025-12-17 20:54:15
276
原创 【ACWing】150. 括号画家
达达是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的达达画了一排括号序列,其中包含小括号 ( )、中括号 [ ] 和大括号 { },总长度为。当栈空,或者栈顶与遍历到的字符不匹配的时候,将下标入栈。这样栈顶存的就是最长美观子串的起始位置。如果匹配,则pop栈顶,并更新答案。现在达达想在她绘制的括号序列中,找出其中连续的一段,满足这段子串是美观的,并且长度尽量大。输出一个整数,表示最长的美观的子段的长度。输入一行由括号组成的字符串。
2025-12-17 16:02:50
569
原创 【Leetcode】649. Dota2 Senate
回合制过程(按座位顺序循环进行):从左到右轮到某个仍具有投票权的参议员时,他可以“禁用”对方阵营中某一名仍具有投票权的参议员,使其之后无法再参与(等价于把对手阵营下一位还活跃的人淘汰)。本回合结束后,当前参议员会在下一轮继续参与(除非被别人之前禁用了)。座位顺序是循环的,也就是走到末尾又回到最前面继续。当某一阵营所有参议员都被禁用时,另一阵营获胜。‘R’ 代表 Radiant 阵营的参议员。‘D’ 代表 Dire 阵营的参议员。“Radiant” 表示 R 阵营胜。“Dire” 表示 D 阵营胜。
2025-12-17 15:28:58
120
原创 【Leetcode】1700. Number of Students Unable to Eat Lunch
由队列的性质,每个学生都有机会排到队头,所以我们只需要考虑栈顶的三明治是不是能被取走。先对学生偏好进行计数,然后遍历三明治,如果栈顶的三明治存在学生能取走,则取;否则就说明当前情况已经卡死,当前的所有学生都吃不到三明治了。表示队头,队头的学生要么可以从栈顶拿到符合自己喜好的三明治,要么就要排到队尾。问最终多少个学生吃不到三明治。是栈顶,并且三明治只能从栈顶开始取。表示每个学生的三明治偏好,
2025-12-17 10:41:54
244
原创 【Leetcode】3008. Find Beautiful Indices in the Given Array II
中出现的所有位置的下标,这样得出两个下标数组。,并且它们都是单调增的。开始的位置(之一)和。的最小的数,然后判断。
2025-12-17 01:27:47
135
原创 【ACWing】112. 雷达设备
假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。雷达装置均位于海岸线上,且雷达的监测范围为。现在给出每个小岛的具体坐标以及雷达的检测范围,请你求出能够使所有小岛都被雷达覆盖所需的最小雷达数目。),所以问题转化为,给定若干区间,求最少的点,使得每个区间至少包含一个点,问最少的点的数量。输出一个整数,代表所需的最小雷达数目,若没有解决方案则所需数目输出。时,该小岛可以被雷达覆盖。行,每行输入两个整数,分别代表小岛的。,分别代表小岛数目和雷达检测范围。,当小岛与某雷达的距离不超过。
2025-12-15 21:44:43
950
原创 【ACWing】111. 畜栏预定
这一时间段内都会一直吃草。当两头牛的吃草区间存在交集时(包括端点),这两头牛不能被安排在同一个畜栏吃草。求需要的最小畜栏数目和每头牛对应的畜栏方案。本质上,问题可以转换为,给定若干闭区间,要求将它们分组,使得同一组内的区间两两不相交,问最少的分组数,和分组方案。每个畜栏在同一时间段只能提供给一头牛吃草,所以可能会需要多个畜栏。行:输出一个整数,代表所需最小畜栏数。开始的连续整数,只要方案合法即可。头牛被安排到的畜栏编号,编号是从。头牛和每头牛开始吃草的时间。,数之间用空格隔开。
2025-12-15 21:07:01
814
原创 【ACWing】110. 防晒(配数学证明)
问题等价于有若干区间,然后有若干点,这些点可能重合,当一个点落在一个区间里,这个点就能匹配一个区间。思路是,先将区间按照右端点从小到大排序,然后遍历区间,对于每个区间,找到位置最小的点与之匹配;经过上面的调整,可以将两个方案调整成一样,从而贪心策略就是最优策略。行,按次序每行输入一种防晒霜的SPF和cover值,即第。输出一个整数,代表最多可以满足奶牛日光浴的奶牛数目。不是这样操作的,我们考虑第一个选点不同的区间,设为。里肯定匹配了某个区间,我们调整一下,让。匹配的区间(如果不存在,那么在。
2025-12-15 20:25:23
759
原创 【Leetcode】2559. Count Vowel Strings in Ranges
再给定一系列询问,每次询问提供两个数。有多少个字符串以元音开头和结尾。
2025-12-15 16:13:38
307
原创 【ACWing】4187. 剪花布条
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?每组数据仅有一行,为由空格分开的花布条和小饰条。花布条和小饰条都是用可见ASCII字符表示的,不会超过。对于每组数据,输出一行一个整数,表示能从花纹布中剪出的最多小饰条个数。输入数据为多组数据,读取到。对于全部数据,字符串长度。,不意味着读入结束!
2025-12-15 09:07:20
337
原创 【ACWing】138. 兔子与兔子
然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样。注意两个兔子一模一样只可能是他们的 DNA 序列一模一样。很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的 DNA 序列。我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含。,分别表示此次询问的两个区间,注意字符串的位置从。对于每次询问,输出一行表示结果。如果两只兔子完全相同输出。
2025-12-11 20:35:07
768
原创 【ACWing】4982. 进制
范围内有多少个整数满足其二进制表示恰好有一个。暴力枚举一下所有的满足条件的数字即可。输出一个整数,表示满足条件的整数数量。满足二进制表示恰好有一个。
2025-12-11 15:26:06
844
原创 【Leetcode】3036. Number of Subarrays That Match a Pattern II
多少次,可以用KMP算法来做。,就说这段子数组满足。
2025-12-09 22:40:03
778
原创 【Leetcode】2309. Greatest English Letter in Upper and Lower Case
问其最大的同时出现过大小写的字母是哪个。如果不存在则返回空串。
2025-11-20 16:45:41
316
原创 【ACWing】1604. 家产
注意比较人均面积的时候,可以用整数乘法来做,而不是除法,因为比较double是不精确的。给定每个人的家庭成员以及他/她自己名字下的不动产(地产)信息,我们需要知道每个家庭的成员数,以及人均不动产面积和人均房产套数。其中ID是家庭成员中编号最小的成员编号,M是家庭成员数,AVG_sets是人均房产套数,AVG_area是人均房产面积。是孩子数量,Child_i是孩子的ID,M_estate是其名下房产数量,Area是其名下房产的总面积。当存在人均房产面积相同的情况时,按ID升序顺序排序。
2025-04-23 01:36:41
370
原创 【ACWing】3587. 连通图
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。每组数据输出一行,一个结果,如果所有顶点都是连通的,输出。每组数据第一行包含两个整数。图中可能存在重边和自环。,表示无向图的点和边数。输入包含若干组数据。行,每行包含两个整数。
2025-04-21 19:05:44
680
原创 【ACWing】1251. 打击犯罪
犯罪集团的危险程度由集团内的犯罪团伙数量唯一确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为。现在当地警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小的集团,并且他们中最大的一个的危险程度不超过。的犯罪团伙被破坏的情况下,对犯罪团伙进行合并,然后再求危险程度最大的犯罪集团的危险程度是多少即可。破坏更多的犯罪团伙,必然导致危险程度最大的犯罪集团的危险程度降低,从而。求危险程度最大的犯罪集团的过程,可以用并查集来做,先在。为达到最好的效果,他们将按顺序打击掉编号。
2025-04-21 16:10:17
726
原创 【ACWing】1414. 牛异或
这样问题就转化为,给定一个数列,求最大的异或数对,可以用Trie做。这道题要求,存在多个异或对最大的序列的时候,先按右端点筛选出最小的,如果还存在多个,再选择长度最短的。可以这样做,每次插入的时候,存一下当前异或和对应的右端点的最大下标(其实就是每次插入的时候都更新下标),然后查询的时候,只有得到了更大的异或和的时候,才更新答案。如果存在多个这样的序列,那么选择序列末端整数对应的奶牛编号更小的那个序列。输出三个整数,分别表示最大的异或和,所选序列首端整数对应的奶牛编号,所选序列末端整数对应的奶牛编号。
2025-04-13 21:45:55
639
原创 【Leetcode】3043. Find the Length of the Longest Common Prefix
各自取一个数,求它们的最长公共前缀的长度(就是看成字符串后求),题目保证只含非负整数,且没有前导。里的所有数插进Trie,然后遍历。问最长的最长公共前缀的长度。求最长公共前缀长度。
2024-12-04 17:32:07
499
原创 【ACWing】6027. 后缀表达式的值
组成的运算数及加(+)、减(-)、乘(*)、除(/)四种运算符。每个运算数之间以及运算数和运算符之间用单个空格隔开,不需要判断给你的表达式是否合法。保证参与运算的整数及结果之绝对值的绝对值均在。从键盘读入一个后缀表达式(字符串),只含有。一个整数,表示给定后缀表达式的值。一个字符串表示给定后缀表达式。如有除法保证能整除。输入字符串的长度小于。
2024-11-29 11:06:39
442
原创 【ACWing】3765. 表达式树
注意这道题里,单独的数字是不需要加括号的,但是如果是负数则需要加。可以先递归解决左子树,然后当前节点,然后右子树。最后将整个表达式左右多余的括号删掉。请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。当运算符是负号时,左儿子为空,右儿子为需要取反的表达式。树中所有叶节点的值均为非负整数。输出的等价中缀表达式分别为。树中至少包含一个运算符。
2024-11-29 03:31:10
495
原创 【Leetcode】3347. Maximum Frequency of an Element After Performing Operations II
一样,但这道题数据范围比较大,需要先做一下离散化再做。思路依然是,先做一下频率计数,然后暴力枚举要变成的数是几,如果要变成。对于所有操作的方案,问最终得到的数组里频率最大的数的频率可能是多少。这样的数就行了,具体证明比较显然,此处省略。次操作,每次操作可以将未操作过的一个数加上。,可以利用计数数组的前缀和数组来。的数的个数由两个因素决定,一个是。的可能性只需要考虑所有的形如。中的数都是正整数,且范围是。,再给定给一个非负整数。,这两个较小者再加上。
2024-11-16 03:33:27
996
1
原创 【Leetcode】3346. Maximum Frequency of an Element After Performing Operations I
对于所有操作的方案,问最终得到的数组里频率最大的数的频率可能是多少。先做一下频率计数,然后暴力枚举要变成的数是几,如果要变成。次操作,每次操作可以将未操作过的一个数加上。,可以利用计数数组的前缀和数组来。的数的个数由两个因素决定,一个是。,再给定给一个非负整数。,这两个较小者再加上。
2024-11-15 01:57:37
918
原创 【Leetcode】2458. Height of Binary Tree After Subtree Removal Queries
给定一棵二叉树,题目保证每个节点的数值都不相同。再给定若干询问,每次询问给定给一个二叉树中的节点的数值,问如果将这个节点为根的子树删掉的话,整个二叉树的高度变成了多少。每次询问是独立的,并且不会真的删除子树。这可以用一遍DFS求出。接着再来一次DFS将每个节点的答案求出来。首先求一下每个节点的深度,树根的深度定义为。
2024-11-13 02:25:12
1025
原创 【Leetcode】3350. Adjacent Increasing Subarrays Detection II
为起点的最长严格上升数组的长度,则答案就是。结尾的严格上升子数组的长度,则如果。
2024-11-13 00:38:17
878
原创 【Leetcode】3349. Adjacent Increasing Subarrays Detection I
前半段验证成功了再验证后半段,都成功了返回true;如果后半段失败了,则可以移动。先验证前半段,如果失败了,则。可以直接跳过若干个到。
2024-11-12 19:05:55
346
原创 【Leetcode】2663. Lexicographically Smallest Beautiful String
产生回文子串的情况下尽可能小。如果此法能产生美丽字符串,则得到答案。变大一点点,肯定是变大尽可能靠右的字符最好。我们从右向左遍历,遇到。的时候,考虑能否将其变大一点点。以上思路是贪心的,但正确性非常显然。能变大,就可以直接默认解存在,继续求解答案。之一,而不存在没有解的情况。变大一点点之后,我们考虑的就是怎么让。开始向后,每个字符都验证能否在不与。,否则就会产生非平凡回文子串。个英文小写字母的范围之内;2.不含任何长度大于等于。大的最小的美丽字符串。注意我们这里只需要考虑。能变大,那么必然存在。
2024-11-12 18:41:13
851
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅