- 博客(43)
- 收藏
- 关注
原创 哈希重要思想续——布隆过滤器
布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?注意,布隆过滤器不好做删除操作,当删除一个数之后,别的数出现误判的可能性会增大。对于布隆过滤器中他的大小要设置成多少,这也是个数学问题,可以参考此文章。
2024-06-03 19:53:23
963
4
原创 哈希重要思想——位图详解
所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。为了方便理解我们引入一道面试题,给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。两个思路:1.排序+二分2.set+find首先40亿个整数占用多少内存?1G约等于10亿字节,40亿个整数有160亿字节,也就是大约16G左右,16G是绝对会内存超限的,所以正常的方法我们都不可以使用。
2024-05-13 17:52:20
899
7
原创 哈希用法及其底层详解+实现
前面几章我们已经讲完了map和set的使用,及其底层,相信你已经会使用map和set了,今天我们学习hash,他可以说是map和set的亲兄弟。
2024-05-08 13:18:43
868
5
原创 手撕红黑树(map和set底层结构)(2)
总的来说红黑树的实现和AVL树非常像,他们就是兄弟,红黑树就是把考虑的因素从平衡因子转变成了颜色。
2024-04-23 11:04:36
622
2
原创 手撕AVL树(map和set底层结构)(1)
int _bf;, _bf(0), _kv(kv){}左旋:新节点插入了较高右子树的右侧右旋:新节点插入了较高左子树的左侧双旋:左+右:新节点插入了较高左子树的右侧右+左:新节点插入了较高右子树的左侧总之一句话:理解旋转我们一定要自己去画图,一定要自己动手,才会理解深刻。
2024-04-18 11:13:47
1800
5
原创 关联式容器——map和set详解
我们前几篇文章讲了搜索二叉树,我们提到了搜索二叉树的应用就是K结构和KV结构,今天我们要提到的这两个关联式容器就是这两个结构的实现,废话少说直接今日我们的内容。总的来说map和set就是我们已经学过的知识,知识换了包装而已,这里的重点就是要理解这个下标的原理,多通过代去深化自己的知识,下一节我们就要开始讲AVL树和红黑树了。
2024-04-09 16:25:55
1004
13
原创 二叉树进阶——手撕二叉搜索树
若它的左子树不为空,则左子树上的所有节点的值都小于根节点的值若它的右子树不为空,则右子树上的所有节点的值都大于根节点的值总的来说二叉搜索树,比较难的地方就是删除部分,多画图多思考。下篇我们就要深入二叉搜索树。
2024-04-06 17:35:34
793
10
原创 详解Linux进程
进程在我们的电脑和手机上是无处不在的。例如我们windows系统下的任务管理器这一个个的启动项就是我们的进程。我们在这个图片上可以看出,进程是需要用到CPU的资源的。当我们开启一个可执行程序,那么这个可执行文件就被加载到内存中,这个可执行程序就是进程。那么在我们的CPU有那么多的进程,CPU是怎么把他们区分并执行起来呢?我们刚刚提到CPU去管理进程,这个说法是有些不对的,实际上,真正管理进程的软件是操作系统操作系统就是我们常常说的例如:windows,macOS,linux;
2024-03-31 13:55:29
656
原创 内存管理+模板初阶
我们之前说过,cpp关注的是自定义类型,所以出现这两个操作符的原因就是解决C语言中malloc不方便解决动态申请自定义类型对象初始化的问题。这里的_a是指针,它本身就有空间,而他又在stack类中,那么我们的delete就先调用析构函数先释放_a的内容,然后释放stack的空间。new和delete的语法规范十分的便于记忆,但是注意符号一定要配对申请的数组释放的时候一定是释放数组的类型,不然编译的时候就会报错。泛型编程:编写与类型无关的代码,是代码复用的一种常用手段。这样的函数我们一般用参数模板来实现。
2023-12-02 18:49:52
1618
5
原创 类和对象(4)——补充内容+DateOJ题
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。从题目要求出发,我们先计算给出的月份距离一月的天数,然后再加上day。我们这里计算月份的天数可以用数组来计算。我们有了上一题的代码,我们就可以先算出两个(month+day)的差值然后再计算year之间的差。因为static定义的变量是所有成员共同拥有的,所以要计算n次,那么就调用n次的构造即可。这个题和上面的打印日期非常的像,我们多加一个year的考虑即可。
2023-11-25 11:46:44
175
10
原创 类和对象(3)日期类的实现
day = day;Print();cout << "日期非法" << endl;这里要注意,构造函数的声明定义分离,给缺省值的时候,只在声明的地方给,不然会出错。
2023-11-25 10:38:56
98
8
原创 C++入门,详解类和对象(1)
类和对象学习是算我们正式进入C++的学习,这一章内容还是很多的,我们需要打好这一节的基础。C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。在我们之前的C语言中,结构体内只能写成员变量,函数则是写在了外面,C++则对其作了优化,新引入了成员函数的概念,就是函数可以写在结构体中。// 类体:由成员函数和成员变量组成// 一定要注意后面的分号。
2023-11-15 17:50:35
117
11
原创 C++入门 1——命名空间,缺省参数
今天就要开始更新cpp的内容了,cpp就是在c的基础上进行的修改+创新,也就是说cpp改正了一些c语言的问题,这些可能会帮助我们去更简洁的去写代码,ok,接下来就是我们的正式内容定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。int val;这里的yjt就是命名空间的名字,这个自己定义。1. 然后命名空间不仅仅用来定义变量,命名空间中可以定义/函数/类型。2. 命名空间是可以嵌套实现的。int a;int b;
2023-11-11 11:41:48
121
12
原创 初识树结构和二叉树
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。注意:树形结构中,子树之间不能有交集,否则就不是树形结构.例如:这个就不是一个树。
2023-10-21 17:18:35
309
14
原创 栈和队列2——队列的实现
上一篇文章我们已经讲到了栈的实现栈和队列1——栈的实现及其oj(括号匹配问题)这一篇我们就要对队列进行研究。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾;出队列:进行删除操作的一端称为队头。队列的特点总结也是四个字就是先进先出,方便理解我们也可以用生活中的例子去学习,就像是一个左右两边都有口的瓶子,我们从右边进去,那先进去的数据就会向左边走,出的时候从左边出去。
2023-09-24 17:03:30
68
3
原创 栈和队列1——栈的实现及其oj(括号匹配问题)
就比如我们在一个细管子中放入石头,那么最开始放的石头在最底下,最后放的石头就在管口,把石头倒出来,那最先出来的石头就是管口的。
2023-09-23 20:26:51
244
3
原创 链表oj3(Leetcode)——相交链表;环形链表
看到这个我们首先想到的就是一个一个比较他们的值有相等的就是交点,但是如果a1和b2的值就相等呢?所以这个思路不行,第二种就是依次比较链表,但是这个方法也不行,因为两个链表长度不行不能这样比较。所以根据第二种的思路,我们可以。主要思路就是,因为是环形链表他会一直的向前走,所以快指针循环到一定的程度他就一定会和慢的那个指针相遇。然后我们就可直到从头开始走到入口,和从快慢指针相遇的地方开始走,那么他们相遇的位置就是入口。这个题目我们可以用我们之前写过的一道oj题来解,那就是快慢指针。我们先来进行数学分析。
2023-09-22 20:42:55
304
3
原创 链表oj题2(Leetcode)(牛客)——合并两个有序链表;判断回文链表;链表分割
所以我们在这里给这两个链表创建一个哨兵位,这样即使链表为空也可以正常的进行链接。这里合并两个链表,我们首先想到的思路就是构建一个新的链表,然后比较两个链表的val值的大小依次插入新链表,这里我们还需要注意几个细节。链表oj题目还有几道题目,每一道题目我们都到细细的钻研,把细节的部分都标上注释,方便以后复习的时候看。我们可以线取到中间的节点,然后把中间之后的链表反转,之后,把前面链表和后面的链表进行比较,即可得出。这个图就是我们的思路的整合,这里还要注意一下,我们在最后要把哨兵位都去掉。
2023-09-21 18:21:39
585
17
原创 链表oj题1(Leetcode)——移除链表元素,反转链表,链表的中间节点,
这里的删除要分成两种情况来考虑,因为这个题目给了我们头节点,所以分成头删和非头删。因为要记录下一个节点的位置,所以1我们这里选择新增两个指针方便记录。这里要让我们找到中间的节点,我们从题目出发,有个非常巧妙的写法就是快慢指针,我们定义两个指针,慢指针正常一次走一步,而快指针一次走两步,那么当快指针走到结束的时候慢指针就在中间位置了。我们假设k是3,那么我们定义fast,和slow两个指针,第一让fast先走k下,然后两个指针一起走,那么当fast走到NULL,slow所在的位置就是倒数第k个位置。
2023-09-19 19:39:47
441
16
原创 双向链表的实现(增删查改)——最好理解的链表
双向链表虽然是单链表之后的内容,但是我们会发现因为有两个指针的原因他的所有的操作比单链表比起来更加的方便,更易于理解。总之,还是要自己上手操作才能加深自己的印象。数据结构重点就是:画图!!画图!!画图!!
2023-09-17 20:37:35
614
11
原创 顺序表的实现(增删查改)
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。初入数据结构,我们要先适应大的代码书写,还要对细节进行把握,希望这篇文章对你有帮助!!!
2023-09-14 20:45:58
244
13
原创 链表(详解)
链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针次序实现的。具象来说链表就是一个火车,数据就放在车厢中,而链表中的指针就是链接火车车厢的线。为了理解链表我们一般会使用两种图形一种就是上面的物理模型另外一种就是逻辑模型。链式结构在逻辑上是连续的,但在物理上是不一定连续的。现实中的节点一般都是从堆上申请出来的。从堆上申请空间,两次申请的空间有可能连续也可能不连续。
2023-09-03 14:26:25
75
8
原创 字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp
我们在C语言的学习中,字符和字符串的运用是很多的,而字符串函数作为库函数的一大类,我们使用这类函数的次数也是非常的频繁,所以学习好字符串函数对于我们学习c语言是非常重要的我们先来整体了解以下有哪些字符串函数接下来我们开始介绍函数今天的内容就结束了,这三个函数是我们在C中运用最多的函数,我们一定要好好的掌握他们,看完文章之后也要自己去穷一敲代码,这样更帮助我们记忆。下一篇文章我们要学习别的函数。
2023-08-04 15:36:06
38
3
原创 数组和指针题目全解,帮你加深对数组和指针理解!
我们在学习C语言的时候最让我们头疼的就是指针的内容了,而数组和指针又有很多的联系,其中就是有关于sizeof和strlen所以这篇文章就是对指针和数组的题目进行总结。
2023-07-30 12:37:53
55
7
原创 玩转qsort函数
我们之前学过一个排序方法叫做冒泡排序,我们先来复习一下for(i = 0;i < sz - 1;for(i = 0;i < sz;1for(i = 0;i < sz - 1;for(i = 0;i < sz;冒泡排序的原理就是。
2023-07-19 16:22:19
181
9
原创 C语言学习——指针进阶
字符指针一共有两种使用方法1第一种就是非常常规的指针用法;而第二种本质上。字符数组我们都很熟悉形式就如同下面为了加快我们的理解有下面这类题目这里12的区别在于他们分别创立的两个地址存放相同的字符串,所以他们的起始地址是不一样的,而34中的字符串为常量字符串34用的是同一个所以他们起始地址指向的是同一个位置,所以3和4是相同的。
2023-07-17 19:49:52
68
10
原创 什么?图案类型的题目居然是这样写的,X型图案的打印及其推广。
我们在写c语言的代码中都会遇到让我们用和空格打印一些图像的问题,每次遇到这种问题的时候,有些同学就会一头雾水不知道要从什么地方下手,这篇文章针对这一大类的问题做出了一些解释和思想,希望我自己的想法对你有用!有别的想法也可以在评论区里一起讨论*
2023-06-25 11:38:29
132
6
原创 猜名次 猜凶手 杨辉三角问题全解
我们首先要把五名选手的名次全部都遍历一次,然后接下来我们就要分析题目的意思,每个选手都说对了一半,所以我们要用if语句进行判断,但是在判断之前我们还要排除名词并列的可能这样我们就写出了最后的代码。
2023-06-24 14:40:36
121
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人