- 博客(9)
- 收藏
- 关注
原创 图论最短路径算法之Dijkstra算法
然后对dis[]数组进行初始化,先将该数组的所有值变为正无穷(dis[S]=0->自己到自己的距离,并将这个下标为S的点染色成白色),表示两点不可达,然后与邻接矩阵配合使用,然后在dis[]数组里找一个下标V使得dis[V]为最小,V标记为白色,在邻接矩阵中查看与V相连的点与V的距离,如果dis[T]>dis[V]+graph[V][T],这个表达式表达S点到T的距离大于S点到V点的距离加上V点到T点的距离,那么将更新dis[]数组为dis[T]=dis[V]+graph[V][T]。
2023-06-17 19:50:04 69 1
原创 leetcode简单题之翻转二叉树
我的思路:我们可以像二叉树的层序遍历一样,使用队列存储每一层的节点,当队列里有元素时,我们取出头部节点,如果该节点有左子节点或者右子节点,将这些存在的节点入队,此时可以定义一个中间节点,用这个中间节点来交换左右子节点。这个题也需要两层循环,第一层循环的结束条件是判断这个存放节点的队列是否为空,第二层循环是这个队列的长度。题目是翻转二叉树,即将这颗树上的所有节点的左右节点相互交换。时间复杂度:O(NxM) N为这棵树的深度,M为节点数。空间复杂度:O(M) M为树的节点数。
2023-06-17 19:05:34 51 1
原创 图论最短路径之Floyed算法
众所周知,我们可以使用二维数组来存储图(该二维数组被称为邻接矩阵),当我们需要求最短路径时,在中转时,判断A点到C点的距离是否大于A点到B点再到C点的距离,如果大于将更新邻接矩阵中的A到C点的距离为A点到B点再到C点的距离。其核心思想是经过某点中转,加入A点到B点的距离是10,B点到C点的距离为5,A点到C点的距离为20(此图将距离设定为权值),而且该图为有向图。如果给了N个点,那么将需要N次中转。如下一个例子,首先给出点的个数和点的坐标,在给出点的连接关系,求出S点到T点的距离(S和T为用户的输入数据)
2023-06-16 16:42:09 131 2
原创 leetcode简单题之链表的两数相加
使用内存不超限的方法,使用较长的那个链表来存储相加的结果。使用一个变量来存储相加的结果,看两个数相加时是否会产生进位,对两个链表进行遍历,逐步相加,如果在最后一位产生进位,我们则需要新开辟一个节点来存储相加后的进位,使用四个指针来解决这个问题,ptr1和ptr2来分别指向两个链表相加时的位置,ptr来指向较长的那个链表,K指向较长链表的最后一个位置,如果在最后一位相加时产生了进位,则K->next=新开辟的那个节点。时间复杂度: O(max(l1.length,l2.lenght))空间复杂度: O(1)
2023-06-14 21:51:32 44 1
原创 socked编程之epoll
该模型的原理是我们将感兴趣的文件描述符上的可读可写事件交给内核检测,当内核检测到我们的感兴趣的事件发生,比如某一文件描述符缓冲区可读或者可写,内核就会将此事件告知用户,因为这个模型不像select模型和poll模型,需要在用户区和内核区进行大量数据的复制,而且该模型底层数据结构是一颗红黑树,数据的查询数据非常快,每当epoll实例上的节点有事件触发时,调用epoll_wait函数系统就会快速告知用户那些socket是准备就绪的。1.EPOLL_CTL_ADD:往epoll实例添加事件。
2023-06-14 17:48:51 132 1
原创 leetcode简单题之二进制求和
我的做题思路:因为两个字符串可能不一样长,所以需要给短的那个字符串补0,先求出两个字符串的长度,然后从后面开始相加,用一个中间数来记录相加之后如果有进位产生的进位数字,做加法的时候需要将字符转换成数字(字符-'0')就可以将字符转成数字。将需要存储的数字从返回结果result的头部插入(result.insert(result.begin(),add%2+'0');如果加法已经算到字符串的第一位,那么看刚才定义的temp是否有进位,如果有进位,则需要再进行头部插入进位数字。相似题目,字符串相加。
2023-06-13 21:50:15 62 2
原创 利用QT线程池
可以看到生成随机数的线程地址与排序随机数的线程地址一致,这是因为当生成随机数的线程完成任务之后才向其他线程发送信号,所以这个时候线程已经停止,线程池将会把这个线程用来执行另一个任务 ,所以才看到这个两个线程地址一致。使用QT提供的线程,我们需要将工作类从QRunnable类派生,如果需要使用信号与槽功能,就需要多重继承QObject,并加入。此处我创建了三个工作对象,thread1是生成随机数组的,thread2是排序数组的,thread3是将数组倒置的。第二步,利用QT的线程池提供的静态方法。
2023-06-13 17:35:45 356 1
原创 Qt多线程
这个方法是ui线程发送信号时启动的,也可以手动开启,此时这个方法就会在这个mythread线程里完成。6.此时只是线程启动,而真正需要完成任务的那个工作函数并没有启动,我们需要手动开启。2.将生成的随机数组进行冒泡排序的排序类-->buddleSort。7.资源回收,使用quit方法与wait方法并删除我们创建的对象。下面是例子:写一个公共的方法,名字随意起,参数也随意设置。1.生成随机数的线程类-->randThread。ui线程将接收的生成的随机数组发送给这个排序线程。ui线程接收这个线程发送的信号。
2023-06-12 22:56:55 109 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人