- 博客(146)
- 收藏
- 关注
原创 MySQL多系统安装配置教程(Windows、Ubuntu、Centos)
4.选中MySQL Server 8.0,点击绿色箭头添加到后边要安装的项目,再选择"Advanced Options"自定义安装目录,随后点击"Next"5.点击Execute执行,等待Status变成Complete,安装完成。6.一直Next下一步,默认使用端口3306,一般使用传统密码,看个人习惯。通过上面的安装程序进行下载安装,运行后根据安装向导操作即可。3.选择"Custom",随后点击"Next"一、在Windows下安装MySQL数据库。二、在Centos下安装MySQL数据库。
2024-11-11 11:06:09
626
1
原创 【递归深搜之记忆化搜索算法】
但是我们点击运行发现程序报错了,超时了,因为我们题目存在大量的重复的递归,所以我们这个题目需要采用记忆化手搜索去解决。这个题目我们首先想到就是递归深搜右和下两个方向的路径,直到达到终点,此时我们统计次数,但是别忘记了要恢复现场哟。我们看到这个题目,依然是先画出我们的决策树,先来看看决策树什么样子。但是此时会超时,我们依然要使用记忆化搜索去解决。同时我们这里还可以直接修改成动态规划的形式。此时我们也可以改成动态规划的代码。
2024-08-29 22:25:33
645
2
原创 【递归回溯之floodfill算法专题练习】
正难则反,我们可以四周开始向里面遍历,但凡能深搜到的,都是不能修改的,此时我们将遍历到的标记一下,其余的全部修改成x即可。
2024-08-28 20:40:40
451
原创 【回溯算法经典题目练习】
我们可以看到上面的决策树之后,我们会发现当我们找到word里面的一个单词在矩阵里面的时候,我们会遍历上下左右四个方向的字母,此时我们就可以使用下面的策略来帮助我们访问这四个位置。这个题目很类似我们之前做过的子集问题,对于子集我们是当前值选或者是不选,而对于这道题目,是对于+或者-我们选或者不选,我们依然是先画出决策树。有了上一个题目的判断,我们这个题目就比较简单了,先画出决策树,我们没遇到一个格子,先判断能不能填,能填就填,不能填就换下一个数。此时我们可以按照每个位置选不同的值来画出我们的决策树。
2024-08-27 19:47:04
463
1
原创 《剑指offer》题目 C++详细题解
如果是,则将添加到结果列表中,并返回。解题思路:这道题很有意思,核心理解是我们对于排序算法的理解,通常我们所理解的排序是比较大小的,如:升序排序的序列意思是:序列中任何一个数字,都比前面的小,比后面的大,我们把说法换一下,对于本题,我们要的有效序列是:序列中任何一个元素y,和它前的任何一个元素x进行有序组合形成xy,比和他后面的任何一个元素z进行有效序列组合yz,满足条件xy < yz(采用字典序列排序)如{32,31},有效组合是3132,所以我们拍完序列之后序列变成{31, 32}.
2024-08-20 19:32:04
1245
原创 《剑指offer》题目 C++详细题解
思路一:使用一个循环,因为我们知道整型变量只有32位,所以循环结束的条件就是到32,从最低位开始,逐位检查数字 n 的二进制表示,利用位运算中的与运算,将当前位移到最低位,然后与 1 进行按位与运算,判断结果是否为 1,如果当前位为 1,则计数器 count 加 1,循环结束后,计数器 count 中保存的就是数字 n 的二进制表示中 1 的个数。但是上面的算法的时间复杂度是O(N)的,有没有更简单更便捷的算法呢?思路二:使用 while 循环,只要 n 不为 0,就继续循环。
2024-08-13 21:44:50
918
1
原创 《剑指offer》题目 C++详细题解
这个过程,会让[left,right]区间缩小,这个过程中,left永远在原数组前半部分,right永远在原数组的后半部分,而范围会一直缩小,当left和right相邻时,left指向的位置,就是最小元素的位置,但是,因为题目说的是非递减,也就意味着数据允许重复,因为有重复值,就可能会有a[left] == a[mid] ==a[right]的情况,此时我们就不能用单纯的二分算法模板来写这个题目,我们此时需要单独处理一下有重复值的情况,我们上面是采用的右端点进行判断,同时我们也可以使用左端点进行判断。
2024-08-05 14:46:49
853
1
原创 【深入理解 C++11 多线程编程:从入门到实践】
如果你直接将变量作为参数传递给线程函数,线程函数会修改一个副本,不会影响到外部变量。如果你希望线程函数修改外部变量,需要使用 std::ref() 或指针,将外部变量的引用或地址传递给线程函数。注意:如果是类成员函数作为线程参数时,必须将this作为线程函数参数。
2024-07-24 13:57:05
1158
1
原创 【代码管理的必备工具:Git的基本概念与操作详解】
不知道你工作或学习时,有没有遇到这样的情况:我们在编写各种⽂档时,为了防止⽂档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,比如:“报告-v1”“报告-v2”“报告-v3”“报告-确定版”“报告-最终版”“报告-究极进化版”...每个版本有各自的内容,但最终会只有⼀份报告需要被我们使⽤。
2024-07-07 20:48:46
3314
25
原创 【回溯算法经典题目解析】
回溯算法是⼀种⾮常重要的算法,可以解决许多组合问题、排列问题和搜索问题等。回溯算法的核心思想是搜索状态树,通过遍历状态树来实现对所有可能解的搜索。回溯算法的模板非常简单,但是实现起来需要注意⼀些细节,比如如何做出选择、如何撤销选择等。
2024-07-02 21:42:07
1114
2
原创 贪心算法题目总结
首先我们看到这个题目,就和我们之前的最长递增子序列是一样的,我们需要对左端点进行排序,然后看是否满足俄罗斯套娃的条件,既然是找最长的套娃个数,此时我们可以使用动态规划来解决这个问题,我们可以假设dp[i]位置表示i位置之前的此时最长的套娃个数,当我们到i的位置的时候,我们需要看看0到i-1位置的最长的套娃个数,如果有一个条件满足俄罗斯套娃的条件,那么最长的套娃个数就可以+1,此时就可以使用动态规划来解决这个问题。我们可以先把所有的数累加在⼀起,然后根据累加和的结果,贪心的删除⼀些数。
2024-06-26 20:06:48
368
1
原创 贪心算法总结
我们会发现这个题目依然是一个区间问题,所以做法依然是先对左端点排序,然后再想出一个贪心策略即可,我们只需要最少的弓箭数,那么一支箭应该引爆更多的气球,将两两互相重叠的所有区间都拿出来引爆。这种会超时,我们想想一下贪心的策略。
2024-06-20 21:14:48
476
1
原创 【贪心算法题目练习】
但是此时会超出时间限制,复杂度太高,我们可以优化一下哈,我们发现,当从 i 位置出发,走了 step 步之后,如果失败了。那么 [i, i + step] 这个区间内任意⼀个位置作为起点,都不可能环绕⼀圈。这个题目和上面的题目思路基本上差不多,但是上一个题目的明显说了一定会到达最后一个下标位置,而我们这道题目是判断能否到达最后一个下标位置,基于上一个题目我们仅需修改⼀下返回值即可,直接上代码啦!因此我们枚举的下⼀个起点,应该是 i + step + 1。
2024-05-31 10:19:51
1040
1
原创 贪心算法专题练习
这个题目的贪心就体现在最小的负数取反之后对整个数组和的贡献是最大的,直接上思路:这个题目比较简单,按照贪心的思想我们只需要按照身高的最大值排序即可,但是仍有一些细节问题,我们不能直接按照i位置对应的heights来排序,因为排序过程是会移动元素的,但是names内的元素是不会移动的。由题意可知,names 数组和heights数组的下标是一一对应的, 因此我们可以重新创建出来一个下标数组,将这个下标数组按照heights[i]的大小排序。
2024-05-30 11:41:03
790
原创 贪心题目总结
首先我们看到这道题目,第一想到的肯定是暴力枚举,我们可以依次枚举两个位置,然后进行相减,最后保存相减出来的最大值即可,但是这样的复杂度就是O(N2)的,此时我们就可以进行优化,我们在枚举卖出价格时候,并不用将前面买入的股票的价格依次枚举,我们只需要找到其中的最小值即可,这一个点就体现出来贪心的策略,由于只能交易⼀次,所以对于某⼀个位置 i ,要想获得最大利润,仅需知道前⾯所有元素的最小值。由于可以进行⽆限次交易,所以只要是⼀个「上升区域」,上升区间一定是稳赚的,我们就把利润拿到手就好了,这就是贪心策略。
2024-05-26 21:27:17
550
原创 HTTP协议、URL、HTTPS协议 ----- 讲解很详细
⭐加密就是把明文(要传输的信息)进行一系列变换,生成密文.⭐解密就是把密文再进行一系列变换,还原成明文.⭐在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥。加密示例:假设我们要加密的消息(明文)是 "HELLO",并且我们选择的密钥是3(意味着字母表中的每个字母向后移动3位)。H -> K (因为H向后移3位是K)E -> H (E向后移3位是H)L -> O (L向后移3位是O,注意这里超过了Z则循环回A)L -> O (同上)
2024-05-26 18:41:05
3600
1
原创 C++实现定长内存池
在说内存池之前,我们得先了解一下“池化技术”。所谓“池化技术”,就是程序先向系统申请过量的资源,然后自己进行管理,以备不时之需。之所以要申请过量的资源,是因为申请和释放资源都有较大的开销,不如提前申请一些资源放入“池”中,当需要资源时直接从“池”中获取,不需要时就将该资源重新放回“池”中即可。这样使用时就会变得非常快捷,可以大大提高程序的运行效率。在计算机中,有很多使用“池”这种技术的地方,除了内存池之外,还有连接池、线程池、对象池等。
2024-05-26 18:31:59
793
原创 【贪心算法题目】
因此,我们可以创建一个数组,统计长度为 x 的递增子序列中,最后一个元素是谁。此时我们来算一下时间复杂度,首先我们要遍历整个数组,其次我们还要遍历长度为x的序列,那么此时的复杂度是O(N2),统计的过程中发现,数组中的数呈现「递增」趋势,因此可以使用「二分」来查找插入位置。这个题目依然是采用贪心来解决,将所有的数字当成字符串处理,那么两个数字之间的拼接操作以及比较操作就会很方便,此时我们只需要找出每次两个值组合的最大的排序方式重新定义⼀个新的排序规则,然后排序即可即可解决问题。
2024-05-23 22:01:33
707
1
原创 简单的UDP网络程序:多人群聊系统
我们把服务器封装成一个类,当我们定义出一个服务器对象后需要马上初始化服务器,而初始化服务器需要做的第一件事就是创建套接字。这里我们使用我们之前写的Log.hpp文件来方便观察输出信息。当我们在进行初始化服务器创建套接字时,就是调用socket函数创建套接字,创建套接字时我们需要填入的协议家族就是AF_INET,因为我们要进行的是网络通信,而我们需要的服务类型就是SOCK_DGRAM,因为我们现在编写的UDP服务器是面向数据报的,而第三个参数之间设置为0即可。
2024-05-22 21:52:28
1472
1
原创 【C++算法】BFS解决拓扑排序问题相关经典算法题
有向无环图是一种特殊的图数据结构。在这样的图中,节点之间通过有向边连接,表示从一个节点到另一个节点的单向关系,并且不存在任何形式的环路,即没有路径可以让你从一个节点出发,沿着一系列有向边最终又回到该节点。拓扑排序是对一个有向无环图的顶点进行排序的一种方法,找到做事情的先后顺序,拓扑排序的结果可能不唯一。AOV网就是在有向无环图中每一个顶点代表一个活动,而有向边则表示活动之间的优先关系的图结构。这个题目给的实例比较简单,我们重新来给一个案例来快速了解这个题目。1.初始化:把所有入度为0的点加入到队列。
2024-05-22 21:43:21
1053
原创 计算机网络套接字知识(非常详细)从零基础入门到精通
思考: 我们光有IP地址就可以完成通信了嘛?想象一下发qq消息的例子,有了IP地址能够把消息发送到对方的机器上,但是还需要有一个其他的标识来区分出,这个数据要给哪个程序进行解析,此时就需要我们的目的IP地址。
2024-05-21 21:49:42
984
1
原创 计算机网络基础知识(非常详细)从零基础入门到精通
独立模式:计算机之间相互独立网络互联:多台计算机连接在一起,完成数据共享局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起广域网WAN:将远隔千里的计算机都连在一起所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如,我们有 "天朝特色" 的广域网,也可以看做一个比较大的局域网。
2024-05-21 21:41:23
1801
1
原创 【C++算法】BFS解决多源最短路问题相关经典算法题
这道题目如果我们按照每次遍历数组每次遇到1就去bfs,肯定是会超时的,但是根据这个写法也有不超时的做法,我们遍历的时候,遇到1就去bfs,并将途中遇到1的位置标记一下,下一轮遇到1的时候,先dfs一下,如果这次dfs宽搜的时候遇到1,发现这个位置已经标记过,此时就不要bfs了,直接就是上次的结果,但是这样写需要两次dfs,并且dsf的代码还不一样,也比较麻烦,那我们来一个新思路:正难则反,我们可以从边上的 1 开始搜索,把与边上 1 相连的联通区域全部标记⼀下;但是如何将这个源点当作一个超级源点呢?
2024-05-20 21:56:30
653
1
原创 【C++算法】BFS解决单源最短路问题相关经典算法题
我们利层序遍历来解决最短路径问题,是最经典的做法。我们可以从起点开始层序遍历, 并组在遍历的过程中记录当前遍历的层数。首先我们看到这个题目,真的是难从下手,既然我们这章是最短路径,我们可以尝试从这方面来考虑考虑,我们可以考虑尝试来转化一下哈。首先我们可以将这道题目简化一下,可以往我们这一章的主题上面来想想。
2024-05-19 10:54:30
675
1
原创 【C++算法】BFS解决FloodFill算法相关经典算法题
首先我们来看看这道题目,我们可以肯定的是这个可以利用上面的图像渲染来做这道题目,但是呢?我们这道题目有点现在,在边界的情况下我们是不能修改的,但是也能做,我们第一遍bfs的时候,不修改里面的值,只遍历到那些边界的情况记录下来,第二次bfs的时候如果遇到上次边界的情况,我们就不修改,如果没有我们就修改,但是太麻烦了,我们有没有更简单的做法呢?
2024-05-16 19:45:44
293
1
原创 【C++算法】堆相关经典算法题
如果还有剩余,就将剩余的石头继续放在原始的石堆里面重复上面的操作,直到石堆里面只剩下一个元素,或者没有元素(因为所有的石头可能全部抵消了),那么主要的问题就是解决:如何顺利的拿出最大的石头以及次大的石头;我们一看到这个就会说,这行呀!我相信找第K大元素,就能想到TopK问题,兄弟们应该能立马想到「堆」, 这应该是刻在骨子里的记忆,只不过我们要知道找第K大元素我们需要建立小堆,我们要想想,如果我们弄一个大堆,如果第一个元素就是数组中最大的元素,那么此时其他元素如何入堆,哪还找什么第k的元素呢?
2024-05-15 17:31:36
383
原创 【Linux学习笔记】一篇文章彻底搞定“Linux生产者与消费者“!
单例模式是一种"经典的, 常用的, 常考的"设计模式.什么是设计模式IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大佬的后腿, 于是大佬们针对一些经典的常见的场景, 给定了一些对应的解决方案, 这个就是设计模式在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。
2024-05-13 18:00:00
1009
4
原创 【Linux学习笔记】一篇文章彻底搞定 “Linux同步与互斥“ !
⭐线程安全描述的是线程并发的问题,可重入描述的是函数的特点。⭐不可重入函数,在多线程访问可能会出现线程安全的问题,但是一个函数可重入,那么不会出现线程问题。
2024-05-13 09:35:38
935
3
原创 【C++算法】队列相关经典算法题
这道题相较于上面三道题就有点难度了,这个题目男难就难在处理空节点,既然统计每一层的最大宽度,我们优先想到的就是利用层序遍历,把当前层的结点全部存在队列⾥面,利用队列的常度来计算每一层的宽度,统计出最大的宽度。其实这道题我们也可以用数组来实现,但是这时候有人说了此时我们会经常进行删除节点,而删除节点都是头删,而数组的头删效率较低,你咋还使用我们的数组呢?内存限制,那么此时我们的编号是2的1500次方,那么肯定会越界,此时无论什么数据类型我们都存不下,但是这个题最后我们是会进行减法的,亿个空节点,会超过最。
2024-05-11 21:50:14
1160
1
原创 【Linux学习笔记】一篇文章彻底搞定 “Linux多线程“ !
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流⭐总结一下就是:线程是进程内的一个执行分支,线程的执行粒度要比进程更细。
2024-04-28 21:43:41
828
3
原创 【Linux学习笔记】一篇文章彻底搞定 “Linux进程信号“ !
每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定义 #define SIGINT 2 编号34以上的是实时信号,本章只讨论编号34以下的信号,不讨论实时信号。这些信号各自在什么条件下 产生,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal。
2024-04-28 21:33:21
1126
原创 Linux学习笔记】一篇文章彻底搞定 “Linux进程间通信“ !
当创建子进程的时候,子进程并不会继承父进程的文件系统,只会继承文件描述符表,此时仅仅是子进程的指向父进程的文件系统,此时就是浅拷贝,此时父子进程就做到了不同的进程,看到同一份资源(缓冲区,由操作系统提供的空间),struct file是允许多个进程通过指针指向我的!⭐所以基于文件的,让不同进程看到同一份资源的通信方式,就叫做管道!!!管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”⭐。
2024-04-27 21:57:10
1216
2
原创 【C++算法】栈相关经典算法题
这个题目很有乐趣,解决这道题目我们对这个字符串要纵向看它,此时如果相邻的字符相同,比如我们上面的[b]和[b],我们就可以把它消灭,然后这两个被消除的字符的上面字符[a]往下掉落,然后这个字符又有相邻相同的字符[a],我们又可以它消灭,很像我们玩过的开心消消乐游戏,只不过我们这里的是两个字符相同就满足消消乐,回归本题,既然要纵向看它,此时我们的数据结构就只有栈符合这个条件,当前元素是否被消除,需要知道上⼀个元素的信息,可以⽤栈来保存信息。自然是遇到一个元素等于当前的出栈序列的元素,那我们就让它出栈。
2024-04-27 21:56:42
878
原创 【C++学习笔记】C++特殊类设计!你绝对不能错过的干货!
拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝, 只需让该类不能调用以及即可。⭐⭐1. 设置成私有:如果只声明没有设置成private,用户自己如果在类外定义了,就不能禁 止拷贝了⭐2. 只声明不定义:不定义是因为该函数根本不会调用,定义了其实也没有什么意义,不写 反而还简单,而且如果定义了就不能防止成员函数内部拷贝了。⭐在c++标准库中对于IO流的对象不能拷贝就是采用的c++11的方式。
2024-04-22 21:52:26
851
5
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人