- 博客(201)
- 问答 (16)
- 收藏
- 关注
原创 【数据结构】图解Kruskal算法+详细代码实现
它的基本思想是按照权值从小到大的顺序选择边,并保证所选的边不会构成环路,直到选取了n-1条边为止,此时形成的树即为最小生成树。综上所述,克鲁斯卡尔算法是一种有效的求取最小生成树的方法,特别适用于边数较少的图。在实际应用中,选择合适的算法对于提高计算效率和优化网络设计至关重要。
2024-06-10 23:45:04
586
原创 【数据结构】图之邻接矩阵代码实现与dfs、bfs
除了上述基本概念外,图还有一些存储结构,如邻接矩阵和邻接表,以及遍历算法,如深度优先搜索(DFS)和广度优先搜索(BFS)。此外,图论中的一些经典问题包括最短路径问题、最小生成树问题、网络流问题等,它们都有对应的算法来解决。综上所述,图是一种强大的数据结构,能够有效地模拟和解决现实世界中的许多问题,如社交网络分析、推荐系统、交通规划等。通过学习和掌握图的相关概念和算法,可以在多个领域内应用图的理论来优化问题解决方案。综上所述,图的存储结构根据图的类型和实际应用场景的不同而有所选择。
2024-06-10 21:52:31
888
2
原创 【数据结构】图解红黑树以及代码实现
此外,红黑树的本质是对概念模型2-3-4树的一种实现。2-3-4树是阶数为4的B树,也是平衡多路查找树的一种,它通过保持树的平衡来确保即使在最坏情况下也能保持 O(Log N) 的时间复杂度进行查找操作。这种情况不可能是刚插入cur节点而引起的,因为此时grandparent是黑色的,此时parent路径上比uncle路径上的黑色节点少一个,所以这种情况是发生在调整的过程中的。插入节点颜色是红色,此时如果他的父亲节点也是红色,那么就不满足红黑树的性质,此时就需要去进行分情况调整,主要情况在二中详细图示。
2024-05-27 16:15:51
929
原创 【在线oj系统】02-开发环境版本说明
使用Cloud的版本决定Boot的版本,SpringCloud的版本决定SpringBoot的版本要求JDK:17+Maven:3.9+MySQL:8.0+
2024-05-05 02:35:04
492
原创 【在线OJ】01-Vue前端项目创建与页面开发
npm install -g @vue/cli # 安装vue。创建文件夹使用VsCode打开后,新建终端输入以下命令。vue -ui # 在浏览器创建项目。表格+分页+搜索小demo。安装ElementUI。引入ElementUI。
2024-05-05 02:33:52
953
1
原创 【在线OJ】雪花算法代码实现
在实现时,首先我们要获取当前的时间戳,如果当前时间戳比上一次获取时,如果比上一次小说明这是一次非法调用抛出异常,如果等于上一次的时间戳说明这是同一毫秒,我们需要让序列化+1,但 同时我们需要判断序列化+1以后是否到达该毫秒内能生成的最大id如果等于了则获取下一毫秒的时间。用一个64比特位的long类型来作为生成id的类型,首先我们要了解哪些位置对应的意义,其中在本项目中10位的工作机器id被细分位5bit的机房id与5bit的机器id。雪花算法支持每毫秒生成2的12次方-1个id。
2024-04-17 21:49:22
457
原创 【在线OJ系统】自定义注解实现分布式ID无感自增
首先自定义参数注解,然后根据AOP思想,找到该注解作用的切点,也就是mapper层对于mapper层的接口在执行前都会执行该aop操作:获取到对于的方法对象,根据方法对象获取参数列表,根据参数列表判断某个参数上是否加有自定义的注解,如果有则读取注解中的value值,并通过传入对象的引用拿到该对象,此时判断该对象的id值是否位空,如果为空则生成全局唯一id并赋值。
2024-04-17 21:00:00
566
原创 【数据结构】七大排序图解+代码实现
我们也可以进行优化,找一个是找要两个也是找,将数组整个分为三段[0,l -1](前已排序部分), [l, r](未排序部分), [r+1, n](后已排序部分)我们可以同时在未排序部分寻找未排序部分的最小值和最大值,最小值与l交换,最大值与r交换,这里要注意的时在将最小值与l交换后,需要判断我们寻找到的最大值是否指向l,如果指向l,在前面最小值与l交换中,l指向的位置已经被交换到了minIndex位置,此时我们需要将maxIndex的位置进行修改,确保最大值不变。依次重复上述步骤,直到j遍历完n-1遍。
2024-03-18 22:25:50
958
1
原创 【字符串匹配】BF与KMP算法
由于在kmp算法中,i指针是不回退的,所以我们在j匹配失败时需要让j回退到合适的位置上,而next数组就记录了当j此时匹配失败时回退到next[j]的位置继续进行匹配,那next数组是如何进行维护的呢。需要注意的是,BF算法的时间复杂度较高,为O((n-m+1)*m),其中n是主文本字符串的长度,m是模式字符串的长度。此外,在实际应用中,字符串匹配问题可能会有更多的变化和挑战,例如处理包含特殊字符的字符串,或者在不完全匹配的情况下找到最接近的匹配项。下面是使用C++实现BF算法的代码示例:。
2024-03-18 22:20:47
1076
原创 【数据结构】万字长文图解+代码实现AVL树
在插入后这个时候我们通过观察发现此时这颗AVL树不平衡了,那么我们先要对这颗树上的节点进行平衡因子的更新,我们从插入的位置开始向上进行遍历,如果当前节点是父亲节点的左孩子就让父亲节点平衡因子--,因为是在左子树进行了插入而右子树不变 bf = 右子树高度- 左子树高度,左子树+1相当于 bf = 右子树高度- (左子树高度 + 1)= bf--,同理如果当前节点是父亲节点的右子树那么就让父亲节点的bf++我们完成了上述插入1的操作,并且通过右单旋维护了AVL树的平衡,此时我们再向上面树中插入80和90。
2024-03-10 02:22:15
1516
原创 【数据结构】HashMap的实现与常见问题
为了降低冲突的概率,例如小李是某某省的人,他的身份证开头是433432.后面是200011120882,小明是另一个省的他的开头是122121,后面也是200011120882,如果取低位那么他与小李就会冲突,而低位所包含的信息与高位包含的信息进行异或后则会降低冲突的概率。由于扩容使得哈希表的长度发生了改变,也意味着插入与获取元素的规则发生了改变,在寻找下标时我们使用key的哈希值与数组长度进行取模运算,扩容使得数组长度发生了变化,所以我们在进行扩容时需要对原有哈希表的元素进行重新哈希,让其满足新的规则。
2024-03-09 14:31:56
1056
原创 【数据结构】图解二叉搜索树的新增、搜索、删除
通常的做法是找到该节点的右子树中的最小节点(或者左子树中的最大节点),用这个节点的值替换待删除节点的值,然后删除那个最小(或最大)节点。依旧往左发现往左为空,于是我们就可以将1插入到此处,但是要想插入到这里,我们需要记录父亲节点,所以在遍历的时候我们需要记录父亲节点位置。总的来说,二叉搜索树的删除操作是一个相对复杂的过程,需要根据不同的情况采取不同的策略,并且在整个过程中保持树的平衡和有序性。当前cur节点的值依旧比目标值9要小,于是我们又去他的右子树中寻找。有如下这样一颗二叉树,我们需要查询9所在节点。
2024-03-07 00:54:29
1299
原创 【排序】希尔排序
它的主要思想是将待排序的序列分割成若干个子序列,这些子序列的元素是相隔一定“增量”的。然后对每个子序列进行直接插入排序。当增量减至1时,整个序列会进行最后一次直接插入排序,此时整个序列变为一个子序列,排序完成。随着增量递减,子序列包含的元素越来越多,但此时大部分元素已经基本有序,插入排序依然高效。总之,希尔排序的效率很大程度上取决于增量序列的选择,不同的增量序列可能导致排序性能的显著差异。虽然到目前为止没有找到最佳的增量序列,但通过合理选择增量序列,希尔排序在大数据集上通常表现出比传统插入排序更好的性能。
2024-03-06 01:06:29
472
原创 【排序】详解归并排序
归并排序是一种稳定的排序算法,适用于大数据量时效率较高,且可以用于链表等数据结构的排序。然而,它的不足之处在于需要额外的存储空间来存放临时数组,并且对于小规模数据的排序效率不如某些简单的排序算法,如插入排序。此外,由于其递归的特性,归并排序在深度很大的情况下可能会导致调用栈溢出。归并排序的核心思想是分治法,即将大问题分解成小问题来解决,然后再将解决后的小问题的结果合并以解决原来的大问题。对于一个这样的数组,首先我们需要将这个数组不断的划分为两个子数组。然后将这些子数组逐个排序合并。
2024-03-05 20:44:26
505
原创 【排序】详解堆排序
具体实现如下:首先我们需要从最后一个孩子所在的子堆进行调整,最好一个孩子就是数组长度-1的位置,那么我们如何根据孩子节点的下标去求出父亲节点的下标呢,我们只需要让孩子节点的下标减去1的差然后除2就能得到父亲节点的下标,同样我们知道父亲节点的下标同样除2在加1就能求出孩子节点的下标。首先我们需要找到孩子节点中的最大值,然后拿他与父亲节点比较,如果他比父亲节点大,那么就进行交换,然后依次向下进行调整(调整孩子节点的子堆),如果比父亲节点小说明这个堆已经调整完成我们就可以结束向下。重复此操作将最大值交换到末尾。
2024-03-05 20:18:23
986
原创 【排序】详解冒泡排序
在每一轮的排序过程中,都会从数列的起始位置开始,对相邻的元素进行比较,如果它们的顺序不符合要求(例如,前一个元素大于后一个元素),则交换它们的位置。这样,每轮遍历后,至少会有一个元素被移动到其最终位置。如果一个数组本来就是有序或者经过小于n-1次就已经排好了序,那么j指针后续的遍历就是徒劳,所以我们可以根据j指针在遍历过程中是否有交换进行判断,如果没有交换说明已经排好序,这个时候就可直接返回。冒泡排序的过程可以形象地比喻为水中的气泡上升过程,较小的元素逐渐“冒”到数列的顶端,而较大的元素则沉到底部。
2024-03-05 19:24:14
520
原创 【排序】详解选择排序
图解依旧将数组分为已排序部分跟为排序部分,初识时定义一个指针指向已排序部分的下一个位置,然后定义一个指针指向未排序部分,依次遍历未排序部分寻找未排序部分的最小值,寻找到后与已排序部分的下一个位置进行交换依次重复。开始时i指向已排序部分的下一个位置,j指针在未排序部分寻找最小值此时minIndex指向了最小值,于是将他与i位置进行交换,之后i指向下一个位置,j依旧在剩余未排序部分去寻找最小值,重复上述步骤。
2024-03-05 19:06:49
556
原创 【排序】详解插入排序
在j从i-1遍历向0的过程中,拿arr[j]与存储的变量t进行比较,因为前部分都是已排序部分,所有在进行比较时会出现两种情况:1》arr[j] > t 说明此时j位置并不是t要插入的位置,这个时候我们可以让j+1的位置修改为arr[j],然后j--继续去比较 2》arr[j] < =t, 此时说明j位置就是t要插入的位置,我们可以结束j的遍历然后让j + 1位置的值更改为t。这个时候arr[j] > t,于是让arr[j+1]=arr[j]依旧是arr[j] > t,于是让arr[j+1]=arr[j]
2024-03-05 18:35:23
698
原创 【排序】基于快速选择算法的快排实现
此时进行将遍历指针指向的元素与基准元素进行比较依次重复此操作,当遍历指针指向的元素比基准元素小时执行:swap(arr[i++], arr[++s]) ,当与基准元素相等时只需要执行i++即可。总的来说,快速选择算法是一种基于快速排序的选择算法,它高效地解决了在不完全排序的数组中寻找特定顺序元素的问题,并因此在各种算法竞赛和实际应用场景中得到了广泛的使用。然后使用一个指针指向开始位置依次往后遍历,如果当前元素比基准元素大则将该元素放在末尾,也就是基准元素后面,如果比当前元素小则将他放在基准元素前面。
2024-03-04 00:31:30
757
原创 【快速选择】解决TopK问题
TopK问题就是在一个数组中寻找出最小(大)的前K个数,或者寻找出第K大(小)的数常见TopK问题图示常见TopK问题链接最小的K个数_牛客题霸_牛客网给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是。题目来自【牛客题霸】寻找第K大_牛客题霸_牛客网. - 力扣(LeetCode)优先级队列是一种数据结构,它根据元素的优先级来决定元素的插入和删除顺序。基于优先级排序:每个元素在队列中都有一个优先级,优先级最高的元素会首先被移除。使用特定数据结构。
2024-03-02 01:40:19
1721
1
原创 【二分】二分模板+二分题目
- 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。. - 力扣(LeetCode). - 力扣(LeetCode)
2024-03-01 19:10:22
392
原创 【Solution】商品秒杀之Redis缓存与MQ异步优化以及超卖一人一单等问题的解决
主要有三张表:用户表、商品表、订单表,将上述sql脚本执行一遍即可。
2023-10-19 22:38:30
850
原创 【计网】计算机网络概述
在每个数据块加上目的地址、源地址等控制信息,以存储转发的方式传输,其主要特点是单个分组传送到相邻结点,存储后查找转发表,转发到下一个节点。一般认为计算机网络是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统,结点将分组的所有比特推向链路所需要的时间,就是从发送分组的第一个比特开始算起,到该分组的最后一个比特发送完成所需要的时间。,用来实现联网计算机之间的各种信息传输,并将分散在不同地理位置的计算机连接起来,进行统一的调配、控制和管理。
2023-10-16 16:20:55
791
原创 【Solution】一文学会微信扫码登录
在该回调接口里面我们需要做的是首先根据参数code去获取access_token// 1. 根据code获取token,根据token获取微信用户数据。
2023-10-14 01:08:34
392
空空如也
OOP里多态的应用场景
2022-08-08
求解答:oop思想里面多态在项目中的应用场景有那些
2022-07-28
江湖救名我搞不明白他为啥会一直输入下去怎么跑不起了
2021-11-23
请问在c语言里面怎么样讲9个数,可能是0也可能是负数,也可能是正数输入一个数组里面
2021-10-24
请问报错是什么意思呢,这个要怎么样做才能不报错
2021-10-24
如何使用printf与scanf函数在控制台打出一下的效果
2021-10-20
问题:用三目运算做题“定义ch然后判断它是否是26个字母中的一个”
2021-10-19
请问要计算1-2+3-4+5 一直到100用do while这样写有什么错误
2021-10-13
求各位指正,实在不知道报错是什么意思
2021-10-11
if else循环中花括号的使用怎么搞啊#c
2021-10-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人