Data Structure & Algorithm
文章平均质量分 78
Data Structure & Algorithm
做人,最重要的就是开心嘛!
你整天瘫在床上,不学习不运动,幻想天上掉馅饼,白天遇事唯唯诺诺,晚上熬夜为情伤感,怀念那点鸡毛蒜皮的小事,这样的你凭什么还认为自己自命不凡?彻底认命摆烂,和自己和解的人很快乐;时刻努力奋斗向上,和人生搏斗的人也很快乐;只有在这两种选择之间摇摆不定、意志不坚的人最可悲,也最痛苦。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构与算法之美-12:排序下-如何用快排思想在O(n)内查找第K大元素?
从我们的原理分析和伪代码可以看出,归并排序的执行效率与要排序的原始数组的有序程度无关,所以其时间复杂度是非常稳定的,不管是最好情况、最坏情况,还是平均情况,时间复杂度都是O(nlogn)。现在,我们集中精力来看快排的时间复杂度。归并排序算法是一种在任何情况下时间复杂度都比较稳定的排序算法,这也使它存在致命的缺点,即归并排序不是原地排序算法,空间复杂度比较高,是O(n)你可能会说,我有个很笨的办法,每次取数组中的最小值,将其移动到数组的最前面,然后在剩下的数组中继续找最小值,以此类推,执行K。原创 2026-11-11 19:35:20 · 128 阅读 · 0 评论 -
数据结构与算法之美-11:排序上-为什么插入排序比冒泡排序更受欢迎?
的排序算法中,冒泡排序、选择排序,可能就纯粹停留在理论的层面了,学习的目的也只是为了开拓思维,实际开发中应用并不多,但是插入排序还是挺有用的。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,我们不做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。插入排序是同样的,不管怎么优化,元素移动的次数也等于原始数据的逆序度。在插入排序中,对于值相同的元素,我们可以选择将后面出现的元素,插入到前面出现元素的后面,这样就可以保持原有的前后顺序不变,所以插入排序是稳定的排序算法。原创 2026-11-06 11:21:12 · 383 阅读 · 0 评论 -
数据结构与算法之美-10:递归-如何用三行代码找到“最终推荐人”?
在时间效率上,递归代码里多了很多函数调用,当这些函数调用的数量较大时,就会积聚成一个可观的时间成本。在空间复杂度上,因为递归调用一次就会在内存栈中保存一次现场数据,所以在分析递归代码空间复杂度时,需要额外考虑这部分的开销,比如我们前面讲到的电影院递归代码,空间复杂度并不是O(1)比如,堆栈溢出、重复计算、函数调用耗时多、空间复杂度高等,所以,在编写递归代码的时候,一定要控制好这些副作用。对于递归代码,你有什么好的调试方法呢?递归,本质并没有变,而且也并没有解决前面讲到的某些问题,徒增了实现的复杂度。原创 2026-11-06 09:36:16 · 154 阅读 · 0 评论 -
数据结构与算法之美-09:队列-队列在线程池等有限资源池中的应用
在数组实现队列的时候,会有数据搬移操作,要想解决数据搬移的问题,我们就需要像环一样的循环队列。),队列的大小有限,所以线程池中排队的请求超过队列大小时,接下来的请求就会被拒绝,这种方式对响应时间敏感的系统来说,就相对更加合理。除此之外,我们还讲了几种高级的队列结构,阻塞队列、并发队列,底层都还是队列这种数据结构,只不过在之上附加了很多其他功能。前面我们讲了阻塞队列,在多线程情况下,会有多个线程同时操作队列,这个时候就会存在线程安全问题,那如何实现一个线程安全的队列呢?原子操作,可以实现非常高效的并发队列。原创 2026-11-05 16:02:11 · 170 阅读 · 0 评论 -
数据结构与算法之美-08:栈-如何实现浏览器的前进和后退功能?
每进入一个函数,就会将临时变量作为一个栈帧入栈,当被调用函数执行完成,返回之后,将这个函数对应的栈帧出栈。这里也可以用栈来解决。前面我讲的都比较偏理论,我们现在来看下,栈在软件工程中的实际应用。如果比运算符栈顶元素的优先级低或者相同,从运算符栈中取栈顶运算符,从操作数栈的栈顶取2。如果扫描的过程中,遇到不能配对的右括号,或者栈中没有数据,则说明为非法格式。,所以把耗时多的入栈操作的时间均摊到其他入栈操作上,平均情况下的耗时就接近O(1)我们再来看栈的另一个常见的应用场景,编译器如何利用栈来实现表达式求值。原创 2026-11-05 14:56:15 · 178 阅读 · 0 评论 -
数据结构与算法之美-07:链表下-如何轻松写出正确的链表代码?
链表代码写得好坏,可以看出一个人写代码是否够细心,考虑问题是否全面,思维是否缜密。所以,这一节讲到的东西,你一定要自己写代码实现一下,才有效果。而且,当我们写完代码之后,也可以举几个例子,画在纸上,照着代码走一遍,很容易就能发现代码中的Bug。你只要把这几个操作都能写熟练,不熟就多写几遍,我保证你之后再也不会害怕写链表代码。一样,其实也没有什么技巧,就是把常见的链表操作都自己多写几遍,出问题就一点一点调试,熟能生巧!因为,链表代码到处都是指针的操作、边界条件的处理,稍有不慎就容易产生Bug。原创 2026-11-05 14:13:08 · 206 阅读 · 0 评论 -
数据结构与算法之美-06:链表上-如何实现LRU缓存淘汰算法
我们上一节课讲过,当我们往支持动态扩容的数组中插入一个数据时,如果数组中没有空闲空间了,就会申请一个更大的空间,将数据拷贝过去,而数据拷贝的操作是非常耗时的。别着急,刚刚的分析比较偏理论,很多数据结构和算法书籍中都会这么讲,但是这种说法实际上是不准确的,或者说是有先决条件的。对于第一种情况,不管是单链表还是双向链表,为了查找到值等于给定值的结点,都需要从头结点开始一个一个依次遍历对比,直到找到值等于给定值的结点,然后再通过我前面讲的指针操作将其删除。不过,数组和链表的对比,并不能局限于时间复杂度。原创 2026-11-05 11:02:10 · 74 阅读 · 0 评论 -
数据结构与算法之美-05:数组-为什么很多编程语言中数组都从0开始编号?
但如果你是做一些非常底层的开发,比如开发网络框架,性能的优化需要做到极致,这个时候数组就会优于容器,成为首选。数组用一块连续的内存空间,来存储相同类型的一组数据,最大的特点就是支持随机访问,但插入、删除操作也因此变得比较低效,平均情况时间复杂度为O(n)在平时的业务开发中,我们可以直接使用编程语言提供的容器类,但是,如果是特别底层的开发,直接使用数组可能会更合适。个数据需要存储到数组中时,我们就需要重新分配一块更大的空间,将原来的数据复制过去,然后再将新的数据插入。如果我们申请了大小为10的数组,当第。原创 2026-11-05 09:30:45 · 322 阅读 · 0 评论 -
数据结构与算法之美-不定期福利第一期:数据结构与算法学习书单
我们就来聊一聊数据结构和算法学习过程中有哪些必读书籍。很多人一提到算法书就会搬出《算法导论》和《算法》。很多同学让我推荐一些学习数据结构与算法的书籍。这本书最大的特色就是讲了很多针对海量数据的处。除此之外,留言区很多人问到算法的实现语言。这种答疑的方式也会成为我们之后的固定动作,我也只看过比较简单的几卷,比如《基本算法。每节课中有需要代码实现的数据结构和算法,能让你对数据结构和算法有个大概的认识。跟《大话数据结构》走的是同样的路线,这也是我把它归到面试这一部分的原因。你可以把它当作你算法学习的终极挑战。原创 2026-11-04 19:01:46 · 115 阅读 · 0 评论 -
数据结构与算法之美-04:复杂度分析下-浅析最好、最坏、平均、均摊时间复杂度
你可以先用我们刚讲到的三种时间复杂度的分析方法来分析一。那究竟如何使用摊还分析法来分析算法的均摊时间复杂度呢?最好情况时间复杂度和最坏情况时间复杂度对应的都是极端。糕情况下对应的时间复杂度就是最坏情况时间复杂度。今天我会继续给你讲四个复杂度分析方面的知识点,你应该已经掌握了算法复杂度分析的大部分内容了。为了表示代码在不同情况下的不同时间复杂度,这段代码实现了一个往数组中插入数据的功能。看是否能将较高时间复杂度那次操作的耗时,今天我们学习了几个复杂度分析相关的概念,上一节我举的分析复杂度的例子都很简单,原创 2026-11-04 14:12:37 · 384 阅读 · 0 评论 -
数据结构与算法之美-03:复杂度分析上-如何分析、统计算法的执行效率和资源消耗?
只要跟着我的思路学习、练习,你很快就能和我一样,每次看到代码的时候,简单的一眼就能看出其复杂度,难的稍微分析一下就能得出答案。复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。谁的量级大,所以我们在表示复杂度的时候,就不能简单地利用加法法则,省略掉其中一个。类型数组,除此之外,剩下的代码都没有占用更多的空间,所以整段代码的空间复杂度就是O(n)现在,我把代码稍微改下,你再看看,这段代码的时间复杂度是多少?原创 2026-11-04 10:53:43 · 838 阅读 · 0 评论 -
数据结构与算法之美-02:如何抓住重点,系统高效地学习数据结构与算法?
学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动地记忆,要多辩证地思考,多问为什么。如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。除此之外,我还给你分享了我总结的一些学习技巧,比如边学边练、多问、多思考,还有两个比较通用的学习方法,打怪升级法和沉淀法。我也会力争每节课都最大限度地给你讲透,帮你扫除知识盲点,而你要做的就是,避免一知半解,要想尽一切办法去搞懂我讲的所有内容。原创 2026-11-03 16:03:10 · 133 阅读 · 0 评论 -
数据结构与算法之美-01:为什么要学习数据结构和算法?
也有很多人说,自己实际工作中根本用不到数据结构和算法。我们平时可能更多的是利用已经封装好的现成的接口、尽管计算机相关专业的同学在大学都学过这门课程,里面的有序集合是用什么数据结构来实现的呢?很多程序员对数据结构和算法依旧一窍不通。性能几乎是开发过程中时刻都要考虑的问题。甚至很多培训机构也会培训这方面的知识,公司只能考察他们的基础知识是否牢固。至人生之路打开一扇通往新世界的大门。如何评估代码的性能和资源的消耗呢?排这些最最基本的数据结构和算法,很少需要自己实现数据结构和算法。原创 2026-11-03 11:02:20 · 114 阅读 · 0 评论 -
数据结构与算法之美-开篇词:从今天起,跨过“数据结构与算法”这道坎
我们整个专栏都是围绕数据结构和算法在具体软件实践中的应用来讲的,我根据自己研读数十本算法书籍和多年项目开发的经验,空间复杂度分析是数据结构和算法中非常重要的知识点,我尝试做一个让你能真正受用的数据结构与算法课程,这部分我会讲一些不是那么常用的数据结构和算法。我都会结合具体的软件开发实例,由浅入深进行讲。我希望这个专栏也能成为你的一个人生转折点。我很感激师兄当年给我的那本《算法导论》,核心和本质的东西其实就是当初学的那些知。这是我自己学习数据结构与算法的经历,我都会结合真实的软件开发案例来讲解,原创 2026-11-03 10:02:23 · 101 阅读 · 0 评论
分享