景禹

其他

图解:什么是哈希?

为什么要有哈希?假设我们要设计一个系统来存储将员工手机号作为主键的员工记录,并希望高效地执行以下操作:插入电话号码和相应的信息。(插入)搜索电话号码并获取信息。(查找)删除电话号码及相关信息。(删除)我们可以考虑使用以下数据结构来维护不同电话所对应的信息:数组链表平衡二叉树(红黑树等等)直接访问表对于数组和链表而言,我们需要以线性的方式进行查找,这在实际应用中代价太大;如果我们使用数组且保证数组中电话号码有序排列,那么使用二分查找可将查找电话号码的时间复杂度降到
2020年9月15日
其他

漫画:什么是计数排序?

!一定对你学习排序算法有帮助~~推荐阅读:图解「归并排序」算法(修订版)漫画:什么是树状数组?图解:什么是AVL树?作者:景禹,一个追求极致的共享主义者,想带你一起拥有更美好的生活,化作你的一把伞。
2020年8月16日
其他

图解:什么是快速排序?

快速排序思想篇与归并排序一样,我们今天要学习的快速排序也是一个分治算法。快速排序首先选一个基准(你也可以认为是要放到排序后数组正确位置的元素)pivot,然后将数组按照选取的基准
2020年8月8日
其他

漫画:什么是树状数组?

首次使用此结构进行数据压缩。在算法竞赛中,通常用于存储频率和处理累积频率表。首先考虑一个简单的问题。给定一个数组
2020年7月25日
其他

图解「归并排序」算法(修订版)

归并排序和之前的冒泡排序、插入排序和选择排序不同,其蕴含了一种分治的思想,关于分治和递归的思想之前有分享一篇文章
2020年7月12日
其他

原来「插入排序」面试官爱考是因为这样~~

大家好呀,我是景禹。今日分享一下插入排序,希望你从中有所收获!面试官最爱考察的是一个被试者对知识掌握的灵活程度和熟练程度,当一道题目可以同时考察到被试者多个知识点的掌握程度和思考能力时,面试官最爱这样的题目,而且对于插入排序这样被大家耳熟能详的知识点,常常成为考点。插入排序
2020年7月1日
其他

特么,冒泡排序有这么难?

的方式对单链表进行排序,又该如何实现呢?交换结点本身比交换结点的值稍微复杂一些,但是只要细心一点,也没有问题,我们还是以上面的例子说明。第一趟冒泡排序(交换结点本身)第一步:定义指向头结点的指针
2020年6月26日
其他

这才是选择排序正确的打开方式

给大家推荐一个可视化网站:https://visualgo.net/zh/sorting我们以今日的选择排序给大家讲一下使用的方法。输入网址后,进入如下界面:但看着密密麻麻的英文,我们直接按
2020年6月23日
其他

图解:什么是 B+树?(汇总篇)

B+树的插入和删除操作一定会有收获,一起加油呀~B+树的插入操作在B+树中插入关键字时,需要注意以下几点:插入的操作全部都在叶子结点上进行,且不能破坏关键字自小而大的顺序;由于
2020年6月20日
其他

面试官问你排序算法最基础的这几问,把这篇文章扔给他

sorting)?一个就地排序算法使用恒定的的额外空间来产生输出(仅修改给定的数组)。它仅通过修改线性表中元素的顺序来对线性表进行排序。例如,插入排序(Insertion
2020年6月20日
其他

图解:什么是B树(心中有 B树,做人要谦虚)?

树的特性所有的叶子结点都出现在同一层上,并且不带信息(可以看做是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。每个结点包含的关键字个数有上界和下界。用一个被称为
2020年6月6日
其他

图解:什么是红黑树?(中篇)

红黑树的插入在一棵AVL树中,我们通过左旋和右旋来调整由于插入和删除所造成的不平衡问题。在红黑树中,可以使用两种方式进行平衡操作:重新着色旋转当红黑树中出现不平衡的状态,我们首先会考虑重新着色,如果重新着色依旧不能使红黑树平衡,那么就考虑旋转。插入操作主要有两种情况,具体取决于叔叔结点的颜色。如果叔叔结点是红色的,我们会重新着色。如果叔叔结点是黑色的,我们会旋转或者重新着色,或者两者都考虑。一个
2020年5月26日
其他

图解:什么是红黑树?(上篇)

结点(默认是黑色的)的每条路径都具有相同数量的黑色结点。这就是一颗典型的红黑树,树中的每个结点的颜色要么是黑色,要么是红色;根结点
2020年5月24日
自由知乎 自由微博
其他

图解:什么是AVL树?

的特性。平衡二叉树的插入操作对平衡二叉树的插入操作而言,其本质上比二叉排序树(BST)的插入操作多了一个平衡操作,解决了二叉排序树插入操作可能出现的斜树,不平衡问题。我们以插入一个结点
2020年5月19日
其他

图解:什么是二叉排序树?

小禹禹,你们好呀,在这里先感谢一位朋友,名叫绍锴,他也是景禹的忠实读者,是通过LeetCode上景禹的一道题解认识的,后来他关注了公众号,加了我好友,有时候相互交流一些学习上的问题,我们也渐渐成了朋友。前些天他建议更新文章的内容不用太多,每次一个知识点,后面再附带一两道LeetCode相关题目解析,我觉得这是个很好的建议,从今以后,景禹也将沿用这个建议。今日便是开始。今天我们谈一谈
2020年5月15日
其他

图解:三款经典的查找算法,等着你

小禹禹,你们好呀,景禹最近着实太忙,但我为了保证质量每天都会将所有空闲时间都用来给大家写文章,希望能我的文章能帮到你,不论是考试还是面试,亦或者是你的教学。今天我们一起来看三款经典的排序算法!跳跃查找(Jump
2020年5月11日
其他

二分查找就该这样学

小禹禹,你们好呀!从今天开始景禹就要开始给大家分享查找和排序算法,有没有很鸡冻。查找算法在日常的考试、面试中都极为常见。基础静态查找(Static
2020年5月8日
其他

一文横扫二叉树的所有遍历方法

小禹禹们,你们好呀,今天周一,景禹开始正式上线啦!今日的内容,景禹昨天和今天两天时间给大家准备,今天我们谈一谈二叉树的四种遍历方式,看完保准让你对二叉树的遍历一网打尽。二叉树的遍历(traversing
2020年4月13日
其他

一文读懂有关Tree的前世今生

小禹禹们,你们好,今天作图耗费了太多时间,发文章有些晚了,还望理解,你可以抽时间在看,特别是那些考研的朋友一定要对其中的性质进行推导。对于大量的输入数据,链表的访问时间太长,不宜使用。而树刚好就是一种极大地缩短访问时间的数据结构,其平均访问时间复杂度为O(logN)。鉴于有些朋友并不仅仅是因为提高自己的编程能力来学习数据结构,所以我们先来唠叨一些有关于树的基本概念和考点。01.树的基本概念树(Tree)是n(n>=0)个结点的有限集。当n=0时成为空树,在任意一棵非空树中:有且仅有一个特定的称为根(Root)的结点;当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、...、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。注意:n>0时,根结点是唯一的,坚决不可能存在多个根结点。m>0时,子树的个数是没有限制的,但它们互相是一定不会相交的。比如,下图中的就不符合树的定义:树中结点的分类:如图中所示,每一个圈圈我们就称为树的一个结点。结点拥有的子树数称为结点的度-(Degree),树的度取树内各结点的度的最大值。度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为分支结点或非终端结点,除根结点外,分支结点也称为内部结点。树中结点之间的关系:结点的子树的根称为结点的孩子(Child),相应的,该结点称为孩子的双亲(Parent),同一双亲的孩子之间互称为兄弟(Sibling)。结点的祖先是从根到该结点所经分支上的所有结点。结点的层次:结点的层次(Level)从根开始,根为第一层,根的孩子为第二层。其双亲在同一层的结点互为堂兄弟。树中结点的最大层次称为树的深度(Depth)或高度。02.树的存储结构不论是考试还是准备找工作面试笔试,永远记住,你理解的越多,那么你需要记住的东西就越少的道理。之前景禹更新过有关顺序存储结构与链式存储结构,在谈栈与队列的时候也谈到这两种存储结构,这也就是为什么所有的教材将这两种存储结构安排在最前面的缘由。关于树的存储结构同样离不开这两种存储结构。要存储树,简单的顺序存储结构和链式存储结构是不行滴!不过如果充分利用它们各自的特点,结合两种存储结构完全可以间接地来实现树的存储。双亲表示法双亲表示法,言外之意就是以双亲作为索引的关键词的一种存储方式。我们假设以一组连续空间存储树的结点,同时在每个结点中,附设一个指示其双亲结点在数组中位置的元素。也就是说,每个结点除了知道自己是谁之外,还知道它的粑粑麻麻在哪里。根结点没有双亲结点,其Parent用
2020年4月10日
其他

一文读懂字符串之 KMP 算法

以前的计算机刚被发明的时候,主要作用是做一些科学和工程的计算工作,科学家发明计算机的时候压根儿不可能想到后人还可以用来KMP。刚开始的计算机都是处理数值工作,后来引入了字符串的概念,计算机开始可以处理非数值的概念了(当然原理还是用数值来模拟非数值,通过ASCII码表)。总之在工作当中字符串的处理操作非常普遍,今日主要分享字符串模式匹配算法KMP的相关操作。在分享KMP算法之前,我们先看一下蛮力法进行模式匹配的过程:显然蛮力法的执行效率太低了,为此有大佬提出了KMP算法。在详细介绍KMP算法之前,我们看一下字符串的前缀与后缀的概念:有了字符串前缀与后缀的概念,我们就可以计算出一个字符串前缀与后缀的公共子串的最大长度。此时,我们就可以来看KMP算法的执行过程了。第一步:第二步:第三步:第四步:第五步:理解KMP算法的执行过程中,一定要注意景禹在图片中标注的文字。最后我们来看一下动画演示:今日给大家分享就到这里,有什么问题欢迎留言,景禹一定知无不言!推荐阅读数据结构与算法之递归+分治LeetCode.27
2020年4月9日
其他

数据结构与算法之递归 + 分治

01.递归每谈到递归,我们总会免不了联系到斐波那契(Fibonacci)数列,当然也不可忽视,斐波那契数列确实是一个很好的例子。但在现实当中,我们只有在迫不得已的情况下才使用递归,因为递归本身的效率并不理想,但他的思想却值得我们留存在记忆之中。题目一:写一个函数,输入n,求斐波那契数列的第n项。我们先一起看一下该题目的递归实现,从而学会写递归的三要素://第一要素:明确你这个函数想要干什么//函数功能:计算斐波那契数列的第n项long
2020年4月7日
其他

LeetCode.27 移除元素

修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。题目链接:https://leetcode-cn.com/problems/remove-element02示例给定
2020年4月4日
其他

队列,我何时才能排到队头呢?

free(p);}销毁一个队列由于链队列建立在内存的动态区,因此当一个队列不再有用时应当把它销毁掉,以免过多地占用内存空间。DestroyQueue(LinkQueue
2020年4月3日
其他

LeetCode 104. 二叉树的最大深度

11001题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:
2020年4月3日
其他

字节跳动实习生面试常问的一道LeetCode题目解析

轴共同构成的容器可以容纳最多的水。假定我们给的数组如下:我们要求最后得到的结果如下图所示:02示例输入:[1,8,6,2,5,4,8,3,7]输出:4903动画演示04代码class
2020年4月2日
其他

LeetCode.26 删除排序数组中的重复项

4。你不需要考虑数组中超出新长度后面的元素。03动画演示04代码class
2020年4月1日
其他

景禹可不想让一个中缀表达式转后缀表达式难住(文末有故事)

鉴于有的朋友并没有看景禹之前的分享,我就把中缀表达式与后缀表达式做简单的科普。中缀表达式简单来说就是我们小学课本中常见的那种形式,也就是我们人所习惯的一种算术表示方式,比如下图。后缀表达式,又称为逆波兰表达式,粗略的理解就是加减乘除在数字后面的一种算术表达方式,例如:关于计算机处理后缀表达式的过程,可以参考昨日更新的文章:栈,你真的懂了吗?今日分享的是中缀表达式转后缀表达式的执行过程,为此景禹用自己仅剩的右手和几个左手指尖给大家绘制了动画。放这张图不是为了显摆什么,就是想希望看文章的人能体会到景禹的用心,也谢谢朋友们对景禹的关注,只要景禹存在着,就会不断给大家更新优质内容,扯远了,直接看我执行动画录制的视频吧,看完不理解中缀表达式转后缀表达式的朋友找我,或者下方评论。下面是中缀表达式转后缀表达式的核心代码,结合之前分享的有关后缀表达式的执行过程,我们就可以自己制作一个属于自己的计算器啦!!!int
2020年3月31日
其他

栈,你真的懂了吗?

9、人生没有捷径,勤劳致富,这些奉若圭臬的名言,有可能是假的。人生如果比作一场游戏,有些悟性高的,便能更快领悟到其中的奥妙和诀窍,便能通过最高效玩法升级,打排位赛,而悟性低的一直在刷低经验怪和副本。
2020年3月30日
其他

史上最全的数据结构flash演示动画!(最全整理,必须收藏!)

这两天景禹忙于毕业论文的事情,这不今天才刚把毕业论文提交给学院初检。本想着休息得了,但今天一个叫「矢」的朋友一句话
2020年3月29日
其他

链式存储结构之双向链表与跳表

等。跳表查找的时间复杂度分析:跳表查找的空间复杂度分析:总结:跳表的查询时间复杂度为O(log(n)),空间复杂度为O(n)。关于跳表的更多内容可以后台回复
2020年3月27日
其他

链式存储结构之循环链表

循环,顾名思义就是:绕。打个比方,就是从前山上有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说“从前山上有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说“从前~~对于单链表,由于每个结点只存储了向后的指针,到了尾部标识就停止了向后链的操作。也就是说,按照这样的方式,只能索引后继结点不能索引前驱结点。这样一来,不从头结点出发,这样就无法访问到全部结点。为了解决这个问题,我们只需要将单链表的尾结点的指针由空指针改为指向头结点的指针,问题就结了。将单链表中尾结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表成为单循环链表,简称循环链表注:这里并不是说循环链表一定有头结点其实循环链表的单链表的主要差异就在于循环的判断空链表的条件上,原来判断head->next是否为空,现在则是head->next是否等于head;终端结点用尾指针rear指示,则查找终端结点是O(1),而开始结点是rear->next->next,当然也是O(1)01.循环链表的初始化操作左右滑动查看初始化代码执行过程typedef
2020年3月25日
其他

被人遗忘了的静态链表

地球人都知道C语言是个伟大的语言,它的魅力在于指针的灵活性,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加灵活方便。(面向对象语言,比如java,可以使用对象引用机制间接地实现指针的某些功能)但是古人还是木有C语言丫,木有JAVA丫,只有原始的Basic,Fortran
2020年3月24日
其他

用动画回顾线性表,棒棒哒

当你下载了线性表的flash动画以后,就可以用这个播放器播放操作。由于国内的网络无法访问官网,我已经帮大家找到了资源奥,后台回复
2020年3月23日
其他

线性表链式存储结构之单链表

线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置。比起顺序存储结构每个元素只需要存储一个位置就可以了。现在链式存储结构中,除了要存储数据信息外,还要存储它的后继元素的存储地址(指针)。也就是说除了存储其本身的信息外,还需要存储一个指示其直接后继的存储位置的信息。来几个概念:把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称为指针或链。这两部分信息组成数据元素称为存储映像,称为结点(Node).01.单链表单链表因为此类链表的每个结点中只包含一个指针域,所以叫做单链表。对于线性表来说,总得有个头有个尾,链表也不例外。我们把链表中的第一个结点的存储位置叫做头指针,最后一个结点指针为空(null)。头指针与头节点的异同:头节点的数据域一般不存储任何信息,谁叫它是第一个呢,有这个特权。头指针
2020年3月23日
其他

这8个免费的资源网站,帮你提升90%效率(快收藏)

告诉你一个好消息,今天我的毕业论文查重率4.7%,超级开心啦!毕业季比较忙,可能对于计算机相关的知识性的内容更新没有之前那么快了,因为知识性的内容需要花费很多时间来消化理解,然后才能分享给大家。未能更新还请亲爱的读者朋友谅解,不过今日分享的内容绝对干货,都是我的私藏奥。1.
2020年3月22日
其他

我做了一套专属简约派的PPT模板送给你

毕业答辩、转正述职、年终工作汇报......很多场合都需要用PPT展示自己的成果!每次看到别人的PPT展示,当场自惭形秽,感觉自己做的PPT实在拿不出手。你是否也想要自己的PPT让人眼前一亮,是否也想通过PPT让工作汇报更完美呢?以后我会经常给大家分享一些我个人比较喜欢的PPT模板,并帮助大家精修成专属你所在公司,或者学校,并且专属于你适当场合的PPT模板。先来看一个我做的一套简约商务型的PPT
2020年3月21日
其他

你想知道的线性表的内容都在这里!!!

线性表线性表的定义:由零个或多个数据元素组成的有限序列注意:首先它是一个序列,也就是说元素之间是有先来后到之分。若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。线性表强调是有限的,事实上无论计算机发展到多强大,他所能处理的元素都是有限的。线性表的形式化定义:模拟考题:请问公司的组织架构是否属于线性关系?分析:一般公司的总经理管理几个总监,每个总监管理几个经理,每个经理都有各自的下属和员工。那这样的组织架构当然不是线性关系了,事实上后面你就会知道,这是一个树状结构。注意线性关系的条件是如果存在多个元素,则”第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。“那么班里同学之间的友谊是否属于线性关系?当然也不是了,因为每个人都会跟许多同学建立纯纯的友谊关系。情侣之间的爱情关系呢?哈哈,当然是扯淡,这要是线性关系,也就不会有所谓的第三者插足了。。。你们的爱情关系定会是线性关系!最后一题,一个班级的点名册,是不是线性表?是啦,看下表:学号姓名性别职位1景禹男班长2哒哒女副班长3花花女音乐课代表4素素女美术课代表5明明男小组长线性表的分类:抽象数据类型数据类型:
2020年3月20日
其他

Shell从入门到高手必看的5本经典书籍

这本书就够了”,绝非虚言。总之,学习AWK这是必读的一本书,豆瓣评分9.4分,五颗星推荐。这本书有我帮大家找到了中英文版本,英文好的可以看原版。4.
2020年3月18日
其他

LeetCode上稀缺的四道shell编程题解析

单词间由一个或多个空格字符分隔。02(words.txt)文件内容the
2020年3月17日
其他

号称三剑客之首的awk,开始秀!

awk能干啥?awk用来处理文件和数据的,是类unix下的一个工具,也是一种编程语言可以用来统计数据,比如网站的访问量,访问的IP量等等支持条件判断,支持for和while循环二、awk使用方式1.
2020年3月16日
其他

SHELL编程三剑客之sed命令

预计阅读时间25分钟今日目标掌握sed的基本语法结构熟悉sed常用的命令,如打印p,删除d,插入i等一、文件编辑器知多少Windows系统 SublimeNotepad++WordTyporaLinux系统vim
2020年3月15日
其他

SHELL编程正则表达式,这一篇就够了

/etc/sysconfig/network-scripts/ifcfg-eth0IPADDR=10.1.1.1NETMASK=255.255.255.0GATEWAY=10.1.1.254#
2020年3月14日
其他

SHELL编程之case语句(“确认过眼神,我遇上对的人”)

春天来了,万物复苏。二月的湖水渐渐苏醒,江南到处芳草遍地,成群的黄鹂四处飞舞。我想,这一切只是个开始,一切都会越来越好,你也会越来越优秀和幸福!今日目标掌握case语句的基本语法结构掌握函数的定义及调用掌握常用的正则表达式元字符含义一、case语句关键词:确认过眼神,我遇上对的人💑case语句为多重匹配语句如果匹配成功,执行相匹配的命令1.
2020年3月13日
其他

SHELL编程之函数的定义及调用

什么是函数?shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能2.
2020年3月13日
其他

shell编程之嵌套循环及随机数,你造吗?

今日目标复习for循环语句的基本语法结构复习while和until循环语句的基本语法结构能会使用RANDOM产生随机数理解嵌套循环每个人都会有自己的学习方式,对不同的人,选择适合自己的方式学习,我是一个笨人,回头复习对我个人而言就显得尤为重要,今日的复习对你若有帮助,请转发或者点个赞,愿您的人生美好若初。一、随机数关键词:一切都是未知数,永远不知道明天会发生什么,珍惜今日🎐😅1.
2020年3月12日
其他

SHELL编程之循环语句

具体需求使用until语句批量创建10个用户,要求stu1—stu5用户的UID分别为1001—1005;stu6~stu10用户的家目录分别在/rhome/stu6—/rhome/stu10②
2020年3月11日
其他

SHELL编程预留题目解析

写一个脚本自动搭建nfs服务#!/bin/bash#name:auto_build_nfs_serve.sh#path:/tmp/#update:
2020年3月11日
其他

SHELL编程之条件判断和流程控制

command2小试牛刀:让用户自己输入字符串,如果用户输入的是hello,请打印world,否则打印“请输入hello”read定义变量if....else...#!/bin/env
2020年3月10日
其他

SHELL编程之变量与四则运算

程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++解释型语言:
2020年3月8日
其他

Shell编程之文本处理工具与bash的特性

最近听我一位工作的朋友讲起,说是在公司上班之后,shell编程经常使用,不论是对数据库日志的处理,还是其他一些形式的文本处理都很方便,所以决定将shell编程好好巩固学习一番,对于那些搞运维的小姐姐,学好shell编程也是很有必要的。(建议浏览器中参考学习,效果更棒!)文本处理工具1.
2020年3月7日