- 博客(58)
- 收藏
- 关注
原创 2025牛客寒假算法营2
A题打卡。检查给定的七个整数是否仅包含 1,2,3,5,6 即可。为了便于书写,我们可以反过来,检查这七个整数是否不为 4 和 7。时间 O(1);空间 O(1)。B题G题F题J题D题代码的核心思路是针对每个小写字母,分别正向和反向遍历字符串,找出该字母至少出现两次时的最长连续子串长度,最后取所有字母对应的最长长度作为可爱度。不过要注意,此代码实现与题目要求的可爱度定义可能存在差异,因为它仅考虑了单个字母的情况,而没有对所有可能的子串和不连续子序列进行检查。
2025-01-23 23:33:18
1004
原创 2025牛客寒假算法营1
那么,模拟方式是,我们首先得到每个元素的下标,然后维护区间两个端点l和r,当我们需要翻倍的区间增大的时候(比如从最小值到次小值),只需要将l向左移动或者将r向右移动,直到包含当前需要选择的元素。对于这道题而言,我们可以先将数组排序,对于前半部分我们将这些元素变成前半部分的中位数,后半部分我们将这些元素变成后半部分的中位数。首先大家需要了解中位数定理:给定一个数组,每次操作加1或者减1,将所有元素变成相同的最小操作次数则是将所有元素变成中位数即可。如果有节点度数大于3,则不存在正确的路径,输出-1。
2025-01-22 20:54:08
906
原创 不同IO模型服务器的简单实现
在阻塞 I/O 模型下,进程在执行 I/O 操作时会被阻塞,直到数据被成功读取或写入。信号驱动 I/O 在套接字准备好进行 I/O 操作时,会向进程发送一个信号,通知进程去处理该 I/O 操作。进程会注册一个信号处理函数来响应。多路复用 I/O 允许服务器监控多个文件描述符(如多个客户端连接),并在某个文件描述符准备好进行 I/O 操作时进行处理。异步 I/O 是最先进的 I/O 模型,进程发出 I/O 请求后,不需要阻塞,操作系统在操作完成时通知进程。在非阻塞 I/O 模型下,I/O 操作不会阻塞进程。
2025-01-21 00:14:20
513
原创 实现简单的TCP服务器
该代码实现了一个多线程的 TCP 服务器,能够同时处理多个客户端连接。每当有一个新的客户端连接,服务器创建一个新的线程来处理该连接,避免了串行处理多个客户端带来的延迟。
2025-01-20 21:05:39
1226
原创 创建一个CMake项目
POST_BUILD解释用于添加一个自定义命令,这里添加到目标的POST_BUILD阶段。表示在构建完成后,使用 CMake 的-E选项执行echo命令输出。解释创建一个名为run的自定义目标。表示该目标的命令是执行可执行文件。表示run目标依赖于,当被更新时,run目标会重新执行。
2025-01-13 21:44:26
1340
原创 Linux系统命令与网络、磁盘参数和日志监控
这里写目录标题重点0.1 监控0.2 测试sysbench 工具相关介绍Linux CPU 使用率统计维度及相关分析0.3 优化1 Linux基础命令和工具1.1 grep搜索字符1. `grep` 命令概述2. 常用选项参数及其作用(1)`-c` 参数(2)`-i` 参数(3)`-n` 参数(4)`-v` 参数(5)`-r` 参数(6)`-C n` 参数3. 不同搜索场景下的 `grep` 命令示例(1)在指定文件查找(2)在多个文件中搜索(3)递归搜索目录下所有文件(4)反向查找(5)结合多个参数查找1
2025-01-10 00:08:06
1157
原创 C++新特性||线程协程(代码解析3)
首先创建一个 ZERO_ThreadPool 对象,使用 init(2) 初始化线程池的线程数为2,然后调用 start() 启动线程池。等待任务完成:与 test1 相同,调用 waitForAllDone() 等待任务完成,并调用 stop() 停止线程池。这个示例代码展示了如何通过 ZERO_ThreadPool 类实现多线程并发任务执行,同时也演示了如何处理带有返回值的任务。:使用 std::future 的 get() 方法来获取任务的返回值,并打印结果。这些函数用于测试任务有返回值的情况。
2025-01-01 01:34:37
918
原创 C++新特性||线程协程(代码解析2)
这段代码是 ZERO_ThreadPool 类的实现部分,涉及线程池的管理、任务调度和线程的启动、停止等操作。1. 如果任务队列为空,线程会被挂起,等待条件变量 _condition 的通知,直到有任务或者线程池被终止。3. 遍历所有工作线程,调用 join() 等待它们完成任务,然后删除线程对象,清空线程列表。3. 如果指定了超时时间,则使用 wait_for 等待任务完成,若超时则返回 false。2. 如果线程池已终止,返回 false,否则从任务队列中取出任务,并移除该任务。
2025-01-01 00:56:13
766
原创 C++新特性||线程协程(代码解析1)
它采用了 C++11 的标准,主要功能包括任务的执行、线程管理、任务队列等,支持任务超时管理。_func 是实际的任务函数,_expireTime 是任务的超时时间(如果有)。提交任务到线程池,f 是任务函数,args 是任务的参数。这种设计非常适合需要高并发和任务调度的场景,能有效地利用多个线程来执行任务,提高系统效率。获取当前线程池中的线程数和任务数。初始化线程池,num 为线程数,成功返回 true,失败返回 false。线程池的工作线程会调用此函数,它的主要职责是从任务队列中取任务并执行。
2025-01-01 00:22:25
677
原创 C++新特性||线程协程
目录1 C++11多线程thread1.1 线程thread1.1.1 语法1.1.2 **简单线程的创建****1.1.3 线程封装**1.2 互斥量1.2.1 独占互斥量std::mutex1.2.2 递归互斥量std::recursive_mutex1.2.3 带超时的互斥量std::timed_mutex和std::recursive_timed_mutex**1.2.4 lock_guard和unique_lock的使用和区别**1.3 条件变量1.3.1 成员函数1. **wait函数**1.
2024-12-31 19:39:36
2337
原创 C++进阶重点知识(一)|智能指针|右值|lambda|STL|正则表达式
序列容器、有序关联容器、无序关联容器、容器适配器序列容器:有序关联容器(键按顺序保存)无序关联容器:容器适配器:序列容器描述了线性的数据结构(也就是说,其中的元素在概念上” 排成一行"), 例如数组、向量和链表。关联容器描述非线性的容器,它们通常可以快速锁定其中的元素。这种容器可以存储值的集合或 者键值对。栈和队列都是在序列容器的基础上加以约束条件得到的,因此STL把stack和queue作为容器适配器来实现,这样就可以使程序以一种约束方式来处理线性容器。类型string。
2024-12-28 14:26:15
975
原创 结构型设计模式
内存屏障是一个指令,它能够强制计算机系统的某些操作按特定的顺序执行。它并不会直接影响计算的结果,而是通过确保内存操作的顺序,从而保证程序的正确性。具体来说,它可以用于阻止对内存的重排序(Reordering),确保内存操作的顺序满足程序的要求。内存屏障是并发编程中的一种重要工具,它帮助我们控制多线程程序中的内存访问顺序,避免由于处理器的乱序执行和指令重排序所带来的问题。理解内存屏障及其在现代处理器架构中的使用是编写高效且正确的并发程序的关键。在 C++ 中,内存屏障通常通过原子操作和内存顺序(如。
2024-12-26 17:24:41
1060
原创 模板方法、观察者模式、策略模式
模板方法模式通过抽象化算法的结构并将具体的步骤交给子类来实现,使得可以在保持算法结构不变的前提下定制化具体实现。它适用于需要在固定流程中灵活插入不同行为的情况。
2024-12-26 13:33:36
1495
原创 面向对象编程概念
虚析构函数(Virtual Destructor)拷贝构造函数(Copy Constructor)移动构造函数(Move Constructor)静态成员(Static Members)封装(Encapsulation)构造函数(Constructor)多态(Polymorphism)析构函数(Destructor)继承(Inheritance)组合(Composition)重载(Overloading)重写(Overriding)接口(Interface)对象(Object)友元(Friend)
2024-12-26 00:29:17
960
原创 B树的实现
B树的阶数t指定了每个节点最多可以拥有2t - 1个键值。叶子节点包含2t - 1个键值,内部节点包含2t - 1到2t个子节点。B树保持平衡,确保查找、插入和删除的时间复杂度为O(log n)。
2024-12-24 15:45:22
724
原创 红黑树的思路及代码实现
红黑树的性质每个节点或是红色或是黑色。根节点必须为黑色。每个叶子节点(NIL节点)都是黑色的,叶子节点在这里充当哨兵,用于表示空节点。从任一节点到其所有叶子节点的路径上,黑色节点的数量相同。插入规则插入一个新节点后,如果违反了红黑树的性质,则通过调整来修复。主要涉及颜色调整、左旋和右旋操作,以确保红黑树的性质。代码详细注释和思路解析:1.定义红黑树节点和结构体// 定义节点颜色枚举 RED 和 BLACK// 红黑树节点结构int key;// 节点的键值。
2024-12-24 15:34:12
457
原创 洛谷解题日记14||前缀和,差分与离散化
这个问题的目标是找到一个最小的连续区间,包含所有不同品种的奶牛,并且最小化区间的大小(即区间的最大坐标和最小坐标之差)。:使用滑动窗口(双指针方法)。便于后面从1开始遍历差分数组。
2024-12-02 17:51:13
756
原创 洛谷刷题日记12||图的遍历
可以将每个杂务视为一个节点,准备工作视为有向边,然后通过拓扑排序确定每个节点的完成顺序,最后使用动态规划求出完成所有工作的最短时间。这样可以方便地从每个奶牛所在的牧场出发,找到所有可以到达的节点。:对于每头奶牛所在的牧场,利用 BFS 或 DFS 遍历所有可到达的节点,同时记录每个节点被多少头奶牛访问过。:如果某个节点被所有奶牛访问过(即计数等于奶牛数量 K),则该节点为可行的聚集地点。按题目来每次考虑每个点可以到达点编号最大的点,不如考虑较大的点可以反向到达哪些点。(任务 1 自身时间)
2024-11-26 22:19:59
1134
原创 洛谷刷题日记11||集合
数据结构设计使用一个一维数组f[]来表示每个节点的父节点,f[i]表示节点i的父节点。初始时,每个节点的父节点都指向自己,即每个节点是一个独立的集合。基本操作查找操作(find):用于找到某个节点的根节点(即它所在集合的代表元素),并且通过路径压缩来优化查找过程,使得每次查找时,路径上的节点直接指向根节点,从而加快后续查询的速度。合并操作(unite):用于将两个节点所在的集合合并。具体来说,将一个集合的根节点(祖先)指向另一个集合的根节点,从而使得这两个集合合并成一个。
2024-11-25 00:41:23
1166
原创 洛谷刷题日记||基础篇10线性表&&二叉树
在代码中,使用是为了将i 和j 唯一地组合成一个键值,存储到map中,以下是详细原因和原理:或者也可以用pair代替数组,更容易操作和方便理解,但复杂度也随之上升使用std::pair改写代码,可以更直接表达(i, j)的组合关系,同时让代码更清晰。
2024-11-22 09:52:38
580
原创 洛谷刷题日记||基础篇9(线性表)
逻辑:我们可以使用set储存当前位置前面所有元素,并自动排序。然后我们需要找到大于等于当前元素的位置和他的前一个位置(刚好小于当前元素),再取这两个元素分别与当前元素相减的绝对值的较小的一个作为他的最小波动值。用来建议编译器将变量存储在 CPU 寄存器中,而不是在内存中,以提高访问速度。我们可以把每相邻的的两个同学想象成他们牵着手(如图)是 C++ 中的一个变量声明修饰符,其中。然后经过换手打到插入的效果。
2024-11-18 23:42:46
718
原创 洛谷刷题日记||基础篇8
我们逐个字符进行匹配,并确保目标位置有效且字符符合要求。如果任一条件不满足,立即返回。这段代码的核心是通过数学计算实现精确的方向定位和单词匹配。这段代码的作用是从矩阵中的某个起点。检查能否连续找到目标单词。
2024-11-17 23:54:12
611
原创 牛客挑战赛77
着重解释这一段代码这段代码的目的是计算每个位上所有数的贡献值,根据它们在k进制下的余数分布,进行不同余数之间和相同余数之间的组合计算。我们一段一段地分析这个代码。
2024-11-16 21:19:13
797
原创 洛谷解题日记||基础篇6(二分和搜索)
这是一个典型的最小化最大间距的问题,可以使用二分查找来解决。下面是详细的解题思路和步骤:问题分析:二分查找最小的最大间距:检查函数的设计:二分查找过程:这题可以直接用递归,但递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多,在竞赛中如果系统栈很小的话,过深的递归会让栈溢出。解决方法是手工模拟递归中栈的操作,将递归转化为非递归算法。 程序中,p相当于堆栈的指针,指向当前拆分的数的位置。sum为已经拆分出来的数的和,如果和小于N,则继续往下拆分,下一个拆分的数不小于前
2024-11-15 21:14:57
1343
原创 洛谷刷题日记||基础篇5(贪心)
这道题的目标是从一个高精度正整数中删除 kkk 个数字,得到一个按原顺序排列的最小数。这种问题可以用解决,使用栈结构高效地完成。
2024-11-12 23:07:57
508
原创 洛谷解题日记||基础篇4
这是一个典型的“背包问题”的变种,其中我们有10个配料,每个配料的质量只能是 1、2 或 3,总和要等于给定的美味程度 nnn。我们需要找出所有可能的组合,并且按字典序输出这些组合。这样每次迭代都可以将可能的最大和范围缩小,最终找到符合要求的最小可能值。从数列的最大值开始,因为单段的和不能小于任何一个单独元素。从数列的总和开始,因为将所有元素放在一段内,其和就是总和。:从左到右遍历数列,将元素累加到当前段,直到段和超出。时重新开始一段,计数段数。使用回溯算法来生成所有合法的组合。
2024-11-12 16:29:13
619
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人