数据结构与算法
文章平均质量分 83
猪皮兄弟
C生万物,从0到1
展开
-
【C++项目设计】tcmalloc高并发内存池
本项目是实现一个高并发的内存池,是把google的一个开源项目tcmalloc的核心给实现了下来,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,它是用于替代系统的内存分配相关的函数(如malloc、free)。1. tcmalloc知名度是非常高的,Go语言就直接用它做了自己的内存分配器。2. 该项目是对tcmalloc中最核心的框架的一个简化,模拟实现出mini版的高并发内存池。。。。原创 2023-05-15 09:03:17 · 695 阅读 · 0 评论 -
动态规划经典题:编辑距离(hard) 详解,看了还不会你来砍我
一般的,我们在做序列DP问题的时候,遇到两个字符串都会用一个二维数组来进行DP,最长公共子序列简称LCS(longest common subsequence)对于本题状态定义:DP[i][j]表示具有word1[0:i]的字符串和word2[0:j]的字符串中的LCS比如"abcde" [0:2]也就是abc原创 2023-01-01 15:34:21 · 2087 阅读 · 0 评论 -
红黑树的迭代器&&红黑树与AVL树的比较
红黑树和AVL树都是高效的平衡搜索二叉树,增删查改的时间复杂度都是O(logN),因为最坏查找高度次,红黑树不追求绝对平衡,其次只需要保证最长路径不超过最短路径的二倍(通过颜色的互斥来达到这一点),这就决定了红黑树会有更少的旋转,所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以红黑树的运用比AVL树更多原创 2022-12-28 17:56:47 · 270 阅读 · 0 评论 -
手撕红黑树、三种情况就可玩转红黑
红黑树只需要掌握三种情况便可玩转1.叔叔为红,变色到头即可2.叔叔存在且为黑,旋转+变色 第一种是旋转的时候不会影响左右子树黑色结点总数,单旋 第二种是旋转时会影响左右子树的黑色结点总数,双旋叔叔存不存在都差不多,直接旋转即可,不影响一直循环到parent不为红或者到根原创 2022-12-25 21:20:00 · 820 阅读 · 0 评论 -
map与set详解
关联式容器:也是用来存储数据的,与序列式容器不同的是,其里面村的是这样结构的键值对,在数据检索时效率更高原创 2022-12-24 17:38:41 · 453 阅读 · 0 评论 -
set,map相关题目,更好地了解set与map
第一种思路:用一个map来进行计数,然后用priority_queue优先级队列来进行大堆排序,其中需要自己写仿函数,并且按照字典序的方式进行排序;原创 2022-12-20 19:26:44 · 80 阅读 · 0 评论 -
手撕AVL树之平衡因子完成四种旋转
如果是有序的或者接近有序,那么查找的效率就退化的很厉害,效率无法保证,那么就要开始尝试控制平衡原创 2022-12-20 15:14:35 · 390 阅读 · 0 评论 -
二叉树的非递归与相关oj
思路:我们可以想象它已经是遍历好的结果,我们只是对它的左右指针进行一点调节,利用递归来进行整棵树进行递归(可以认为是已经构建好了的双向链表,但是指向出了点问题,我们要通过对树的中序遍历这种方式来顺序访问到双向链表中的各个结点来修改指向)原创 2022-12-18 16:32:04 · 415 阅读 · 0 评论 -
搜索二叉树详解
搜索二叉树:搜索二叉树增删查的时间复杂度是O(h) h是树的高度最坏的单支情况下是O(N),所以说搜索二叉树还是有缺陷的,最坏情况下增删查太慢了,想达到O(logN必须是满二叉树或者完全二叉树),所以就有了AVL树,红黑树等等,这些平衡树和搜索树的却别仅仅在效率上,功能上并没有区别原创 2022-12-17 15:35:40 · 380 阅读 · 0 评论 -
list详解&&list模拟
算法库中的sort是使用的是QuickSort,针对的是连续空间,所以list需要自己写一个独立的出来,链表的sort底层就是 MergeSort。但是,链表的sort价值不大,不如使用vector+算法库的sort。原创 2022-10-12 20:24:37 · 453 阅读 · 0 评论 -
【C++】string类的使用,小试牛刀
学到的知识需要应用起来才能知道自己掌握,多做题对于现在的我们而言是很有帮助的,感谢大家的支持,大家一起共同进步!原创 2022-09-04 16:00:00 · 366 阅读 · 7 评论 -
【牛客网刷题】(第五弹) 多种思路刷题.
牛客网是个很不错的刷题软件,也希望大家能天天在上面刷刷题,大厂offer指日可待啊兄弟们。刷起来原创 2022-08-28 13:23:44 · 1783 阅读 · 10 评论 -
【牛客网刷题】(第四弹)多道中等难度题,早日拿offer,快来看看
包括的题目主要有 矩阵中的路径,二叉树的下一个结点、旋转数组的最小数字,最小的k个数原创 2022-08-27 10:57:57 · 1062 阅读 · 11 评论 -
【数据结构与算法】八大排序(下)剩下四大排序+基数排序的补充.什么,这还拿不下你?
解释:1.堆排序最好最坏都是O(NlogN)因为堆中几乎不可能有序2.冒泡排序最好是O(N),是加了状态变量的时候,第一次遍历有序就跳出了,不然的话还是O(N^2)3.快速排序受Keyi的影响很大,最坏是N+N-1+N-2+.....4.希尔排序不稳定原因:在预排的时候,相同的数在不同的gap组,保证不了位置5.选择排序不稳定原因,比如 4 5 5 1 3 86.快排加入了三数取中之后出现时间复杂度O(N^2)的概率极低,空间复杂度 是因为参数压栈,空间是能够重复利用的,看深度,O(logN).原创 2022-08-27 12:00:00 · 824 阅读 · 11 评论 -
【牛客网刷题】(第三弹)链表与二分法oj
进阶要求时间复杂度O(N),空间复杂度O(1),那么就只能遍历链表了,不然的话可以用辅助数组来存储暴力求解的话时间复杂度O(N*M)要求时间复杂度O(N+M),来看看下面的线性搜索方法吧原创 2022-08-25 14:18:28 · 941 阅读 · 9 评论 -
【数据结构与算法】八大排序(中)快速排序 快排居然还能这么优化?快排的非递归该如何写?
因为递归是个很麻烦的事,当递归划分小区间,区间比较小的时候,就不再递归划分去排序这个小区间,可以考虑用其他排序对小区间处理,比如插入排序这样做减少了非常多的递归次数,最后一层就占了总的递归次数的一半,如果能把最后3、4层都去掉,至少减掉了过半的递归次数(可以假设区间小于10就不再递归)...原创 2022-08-26 12:00:00 · 861 阅读 · 10 评论 -
【牛客网刷题】(第二弹)中等难度题型来了.这些题你都会做吗?
要求时间复杂度O(NlogN),就先创建一个数组来存储,然后利用algorithm自带的sort函数(用的是快排时间复杂度O(NlogN) )来进行排序,再放回原链表中,空间复杂度O(N),还可以利用冒泡排序的思想,时间复杂度O(N^2),空间复杂度O(1)...原创 2022-08-24 14:01:15 · 1147 阅读 · 15 评论 -
【数据结构与算法】八大排序(上),八大排序你都搞懂了吗?
八大排序:插入排序,希尔排序,选择排序,冒泡排序,快速排序,堆排序,归并排序,计数排序,你都懂了吗?希尔排序又称缩小增量法,希尔排序的基本思想是:先选拟定一个整数,把待排序文件中所有记录分成gap组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序,然后,取,重复上述分组和排序的工作,当达到=1时,所有记录在一组内排好.........原创 2022-08-25 09:00:00 · 1236 阅读 · 18 评论 -
【牛客网刷题】经典题型,确定不来看看?.
牛客网是个很不错的刷题软件,也希望大家能天天在上面刷刷题,大厂offer指日可待啊兄弟们。刷起来。猪皮兄弟快来点击链接注册吧!!!原创 2022-08-23 10:45:02 · 1208 阅读 · 15 评论 -
【数据结构与算法】堆&&堆排序(堆是一种数据结构).
TOP-K问题:即求数据结构中前k个最大的元素或者最小的元素,一般情况下数据量都比较大。比如:专业前10名,世界500强,富豪榜、游戏中前100的活跃玩家等对于TOP-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太现实了(可能数据都不能一下子全部加入到内存中,最佳的方式就是用堆来解决)TOP-K就是从N个数中找出最大或者最小的前k个....原创 2022-08-24 09:00:00 · 1392 阅读 · 10 评论 -
【数据结构】二叉树(前中后序遍历,多个相关题目).
二叉树的链式存储结构是指,用链表来表示一颗二叉树,也就是用链来指示元素的逻辑关系,通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子的存储地址。现在我们用的是二叉树,比如红黑树等高阶数据结构会用到三叉树...原创 2022-08-22 11:00:00 · 1734 阅读 · 35 评论