- 博客(47)
- 收藏
- 关注
原创 两分种解决:xshell终端delete键无效
在使用终端输入错误时,发现自己按下delete打出一些奇怪的字符如自己的delete无效是一件很烦恼的事情。
2025-03-01 11:20:14
335
原创 两分钟解决 :![rejected] master -> master (fetch first) , 无法正常push到远端库
然后再进行push就可以把上次提交失败的内容提交上去了。若你在git上修改了如README.md的文件。将线上、线下代码进行合并就可以很好的解决这个问题。在git push的时候莫名遇到这种情况。README.md文件的,所以导致。(必要的时候可以用sudo提权)(必要的时候可以用sudo提权)远端仓库git和本地不同步。
2025-01-13 21:07:32
615
原创 面试经典问题 —— 链表之返回倒数第k个节点(经典的双指针问题)
第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针同时移动,当第一个指针到链表的末尾的时候,返回第二个指针即可。使用双指针方法的关键在于理解何时以及如何移动指针,这通常依赖于当前指针所指向元素之间的关系。first指针是快指针(fast),second指针是慢指针(slow)显然,时间复杂度为O(N)空间复杂度为O(1)从这道题可以学到双指针的基本解题场景。无疑,本题是很简单的。
2025-01-02 14:55:06
414
原创 面试经典问题 —— 最大/小前K个数问题(top - K)问题
arr[i]>=heapTop:arr[i] 不可能属于第 k 小数(已有 k 个元素在堆中),直接丢弃 arr[i];arr[i]
2024-12-25 15:18:37
527
原创 两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器
【代码】两分中解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VS Code 服务器。
2024-12-24 10:25:07
6859
8
原创 各种常见排序
在生活中随处可见排序,例价格排序 :在数据结构和算法中,排序是非常基本且重要的操作之一:提高搜索效率:排序后的数据可以使用更高效的搜索算法,例如二分查找,这比线性查找要快得多。对于大规模的数据集,这一点尤为重要。优化资源利用:排序可以帮助更好地管理资源,比如数据库中的索引机制依赖于排序来快速检索信息。简化数据分析:当数据是有序的时候,分析起来更加容易,比如找到最大值、最小值、中位数或进行频率分布统计等操作都会变得简单直接。实现原理 :它的实现原理类似于人们如何整理一手扑克牌。
2024-12-23 14:26:10
310
原创 平衡的二叉搜索树 —— 红黑树
红黑树:插入和删除操作的时间复杂度也是O(log n),但这些操作涉及的重新着色和旋转次数较少,因此在实际应用中,红黑树的插入和删除操作通常更快。AVL树:插入和删除操作的时间复杂度也是O(log n),但这些操作涉及的旋转次数较多,因此在实际应用中,AVL树的插入和删除操作通常较慢。AVL树:查找操作的时间复杂度也为O(log n),但由于AVL树的高度严格平衡,因此在最坏情况下,AVL树的查找性能优于红黑树。if (parent = pparent->_left) // 说明叔叔节点在右边。
2024-11-11 10:46:56
606
原创 平衡的二叉搜索树 —— AVL
3. 自平衡机制:当向AVL树中插入或删除节点后,如果树失去了平衡,即某个节点的平衡因子不再是-1, 0, 或1,则通过一系列旋转操作来恢复平衡。由于AVL树要保证绝对平衡,所以在实际应用中,如果只是侧重查找可以用AVL树,如果要经常的增删,那么用相对平衡的空黑树。AVL树是绝对平衡,如果经常插入经常要进行旋转,旋转是有消耗的 ,所以STL map和set的底层其实是相对平衡的。2.插入后等于 +-1 , 说明整棵树的高度变化了,要算祖先的平衡因子(插入只影响祖先的平衡因子)
2024-11-06 08:59:56
593
原创 特殊的一种树 —— 二叉搜索树
就如性能分析而言,当插入的是递增或递减的序列,二叉搜索树退化,时间复杂度O(N)所以 ,人们通过旋转的方法,保证了树的高度平衡,使其所有基本操作的时间复杂度保证为O(logN),这就是著名的。要删除的节点有两个子节点,通常的做法是找到其右子树中的最小节点(或左子树中的最大节点),用该节点替换要删除的节点,然后删除这个最小(或最大)节点。新节点作为这个空指针指向的新子树的根节点。要删除的节点只有一个子节点,将该节点父节点的指针重新链接到它的子节点上。要删除的节点没有子节点(叶子节点),可以直接删除。
2024-11-01 21:57:13
308
原创 非线性结构 —— 树
红黑树 : 节点由红色和黑色两种颜色构成,保证 根节点为黑色,没有连续的红节点,最长路 径最多是最短路径的两倍(达到相对平衡)此时为了保证二叉搜索树能够一直有 O(logN)的效率,我们对退化的二叉搜索树进行旋转这就有了两大平衡搜索树(AVL树和红黑树)中序遍历(In-order):遍历左子树,访问根节点,遍历右子树(对于BST,结果是有序的)。对于每个节点,左子树的所有节点值小于该节点,右子树的所有节点值大于该节点。第i层,最多有2^(i-1)个节点。
2024-10-31 10:42:58
710
原创 线性结构——队列
队列(Queue)简介队列是一种数据结构,遵循先进先出(FIFO)的原则。它的基本操作包括入队(enqueue)、出队(dequeue)和查看队头元素(peek)。在队列中,最早添加的元素最先被移除。基本操作1. 入队(Enqueue):将元素添加到队尾。2. 出队(Dequeue):移除并返回队头元素。3. 查看队头元素(Peek/Front):返回队头元素但不移除它。4. 检查队列是否为空:判断队列中是否有元素。特点与应用FIFO结构:最早进入的元素最先被处理。排队管理:队
2024-10-30 11:33:00
324
原创 线性结构——栈
定义栈时要定义 栈顶top和capecity(其实top就是顺序表的size,也是用下标搞事情)。栈有着先进后出的顺序所以,要通过获取顶打印,而不是想当然的打印。用链表实现栈,由于栈只能从栈顶进入,要尾插就比较麻烦,所以我们用。在C++的STL 种栈作为适配器,是封装了双端队列实现的。注意:栈和顺序表很像,栈就是一个只能从一边进出的顺序表。只允许在固定的一段插入和删除的数据结构。如图:尾指针找不到前一个节点。
2024-10-24 13:45:00
177
3
原创 线性结构——链表
ex,next要存放下一个节点的地址,所以是Node*类型,头节点也是要放下一个节点的位置,所以说是Node*类型。在有节点创建的情况下,这时tail表示的是原链表的末端。链式结构创建新节点不需要传一个地址的,直接一个值解。tail储存的地址 (而tail储存的地址就是上一个节点储存的地址)tail -> next ,表示的是tail储存的地址,一个一个的把malloc出来的节点消除了。链表由头节点控制,一些可能改变头的操作。链表以节点为元素构成,一个节点一部分储存自己的数据,一部分存储下一个节。
2024-10-07 13:44:57
560
原创 线性结构——顺序表
缓存预加载概念:{访问数据时不会只加 (从内存中到缓存中)删除:pop ( 爆掉了 ) | | erase(计算机删除)顺序表在物理上是连续的,物理上连续有了这个条件,1. 这些size(有效数据个数),acpicity(空间容量)只是一个”显示“的作用。4. 注意:顺序表(数组类结构)不用free删除数据,而是直接操纵size--。插入数据时,因为要移动所以,时间复杂度为O(N)顺序表:顺序表其实就是数组(一般作为接口(类似于函数)放在头文件中)
2024-09-26 00:25:45
948
原创 初识时间复杂度和空间复杂度
从树的深度入手就是O(logN)遍历所有节点就是O(N);1.只保留最高项(把N当无穷大,其他的倍数啥的都可以忽略)记作 O()空间复杂度不研究代码占用了多少byte位(太难算了没有意义)技巧:面对稍微有一点复杂的程序,真正的高手在算时间复杂度时。2.若只有常熟项,则时间复杂度为O(1)这种的复杂度就是O(1),他只使用了一个固定大小的变量。时间复杂度是指一个算法运行次数;递归的时间复杂度其实就是子函数调用的次数。有关于时间复杂度常见的题目:8页。几个空间复杂度的题目:10页。
2024-09-16 09:26:33
365
原创 一些简单,入门的算法和解题技巧
有a+b→c 把a,b理解为固定的一个数是愚蠢的(因此很多情况会影响在运行中a,b,c的值的改变我们千万不能把它们当成固定的值了,这是新手很容易犯的错),要吧a当成第一个加数,把b当成第二个加数 并不断的给他们附上新值。b是小的数(b要做被除数应该小一些)在写这个题目时我有有一个逆天的思路:遍历4位的数字然后去判断aabb的数字,然后打。而左斜对角线是i+j= n-1 (固定的一个数)(n为你需要输入的规模)对于这样一个特殊的数组,我想到的是一个二维的二分查找,但是时间复杂度O(NlogN)
2024-09-03 15:25:14
682
原创 C语言重头戏之指针
分析: int 是函数的返回类型 , 由于后边是函数的特征所以( *pf3 )是指向函数的指针 pf3为变量名 , ( int x , int y )是函数参数类型。用来函数形参的创建( 二维数组的元素是一维数组,函数形参创建不是正好要一个首元素地址吗 )下图的int (*p)[5] = int arr[][]我们可以给指针赋值NULL NULL是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错。
2024-08-23 12:41:29
509
原创 关键字,其他知识
用“ 1en "可表示10的n次方( 1 en = 1 * 10^n( 这里的^不是异或) )注意:全局变量不建议大量的去使用,全局变量所有人都看得到,乱改后果很严重,因此全局变量一般是常量。指针变量解引用指向的地址是不可以改变的,而指针变量p本身的地址可以改变。指针变量p本身的地址不能改变,而指针变量解引用指向的地址是可以改变的。不要忘记各个东西(特别是占位符 ,类型的限制)的限定(要细节一点.)ASCII是 数字到字符的映射, 但是ASCII的值是英文。1.先把要添加的文件复制到当前项目。
2024-07-19 22:28:01
876
原创 数组的应用
问题:ex 在第一次循环i=0时,里头arr【0】先就已经进行精准定位了 ,后续的scanf输入就是给这个arr【0】{即数组中的第一个}赋值。ex set_arr1(arr1 , n)【为了不产生调用歧义这个n表示调用的数组元素个 数】(arr1是数组的首地址)注意了:用指针模拟的二维数组并不连续,真正的二维数组是连续的因 此这个方法只是一个模拟数组的作用。对应法则是: 第一个数对应下标0以此类推( 若该数组有n个元素 最后 一个数对应的下标是n-1)
2024-06-30 17:29:41
804
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人