数据结构与算法
文章平均质量分 75
码炫课堂-码哥
一名有10余年经验的互联网老兵,历经从传统软件公司到大型互联网公司的洗礼,早年在中兴通讯等大型通信公司担任项目leader,后随着互联网的崛起,先后在前美团支付等大型互联网公司担任架构师。对互联网架构底层技术有相当的研究和独特的见解,在多个领域有着丰富的实战经验。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构+算法(第14篇):精通二叉树的“独门忍术”——线索二叉树(中)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-02-03 09:45:09 · 588 阅读 · 0 评论 -
数据结构+算法(第13篇):精通二叉树的“独门忍术”——线索二叉树(上)
一个二叉树通过如下的方法“穿起来”:所有原本为空的右(孩子)指针改为指向该节点在中序序列中的后继,所有原本为空的左(孩子)指针改为指向该节点的中序序列的前驱。从上面的线索二叉树的定义就可以看出,为了复用“空节点”指针,需要访问叶子节点,这个已经是遍历的一部分了,所以为了“不走重复路”,最经济的方法是边构造边遍历。接下来的文章将分别介绍“前序遍历”的线索二叉树的各种转换以及遍历算法、“后序遍历”的线索二叉树的各种转换以及遍历算法。为了节省篇幅,本文仅介绍“中序遍历”的线索二叉树的转换以及遍历算法。原创 2024-02-03 09:40:29 · 785 阅读 · 0 评论 -
数据结构+算法(第12篇):玩平衡二叉树就像跷跷板一样简单!
图3表示的是一棵平衡二叉树,与它对应的任意一棵非平衡二叉树都可以重复按照如下方式变换而来——在维持二分查找树的前提下,从高度较小的子树中取出一个节点A,插入到高度较大的子树中——如图4所示。朴素的想法就是:遍历每个节点,检查它的左右子树高度,若高度之差超过1,设法交换一些节点的位置,使得该位置左右子树新的高度差缩减到1以内。在图2中,对于值为9的节点,它的左子树为空,高度为0,右子树高度为3,两者相差3,不满足平衡二叉树定义的第二条规则。显然上式与前面的假设1矛盾,从而证明了平衡二叉树的平均查找长度最短。原创 2024-02-03 09:33:01 · 812 阅读 · 0 评论 -
数据结构+算法(第11篇) :无死角“盘”它!二分查找树
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!一文中提到了:为了方便查找,需要进行分层分类整理。而满足这种目标的数据结构之一就是树。树的叶子节点可以看作是最终要搜寻的目标物;叶子节点以上的每一层,都可以看作是一个大类别、层中的每个节点都可以看作是一个小类别。从上图可以看出,要定位目标物,就需要从最上面的大类依次向下定位目标物所属的小类。原创 2024-02-02 09:34:32 · 1282 阅读 · 0 评论 -
数据结构+算法(第10篇):叉堆“功夫熊猫”的速成之路
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!上一篇文章提到:树是一种分层分类的数据结构,用途是查找和排序。而与查找和排序密切相关的就是求最值(最大值或者最小值)。今天我们就来介绍一个与最值相关的数据结构——二叉堆。尽管网上或者相关的算法书均有对二叉堆算法的介绍,但大部分只停留在how的阶段,并未对一些关键细节进行why的深究。原创 2024-02-02 09:23:21 · 807 阅读 · 0 评论 -
数据结构+算法(第09篇):菜鸟也能“种”好二叉树!
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-02-02 09:01:18 · 1233 阅读 · 0 评论 -
数据结构+算法(第08篇):史上最猛之递归屠龙奥义
一段存储空间(通常是内存);一组向这段存储空间存、取数据的操作。它满足“后进先出”原则。打个形象的比方:堆栈就相当于茶壶,向堆栈中存数据就相当于向茶壶里加水,取数据就相当于从茶壶里倒出水。很显然,最新加进茶壶的水在最上层,从茶壶里倒出水的时候,也是这部分水先被倒出来。递归算法到非递归算法的转换,是算法中比较复杂、高阶的内容。其应用,无论是在编译原理还是人工智能领域都随处可见。本篇文章致力于用形式化的套路,带领你彻底入门这项技术。从此,面对类似的问题,笑看风云淡、游刃有余。结束。原创 2024-02-02 08:53:00 · 1302 阅读 · 0 评论 -
数据解构+算法(第07篇):动态编程!黄袍加身!
我们逆着递归自然展开的方向,根据状态转移函数,一边查表一边从底部向上逐步计算函数值,并将新计算出来的值也保存到线性表中,供更高层的函数值计算时使用。根据上面的树状图示,显然每次求当前层的函数值时,只会用到紧邻的下一层的几个函数值,这意味着更深层的函数值都没有用了,可以舍去、释放内存。换言之,无论是使用“备忘录法”还是“动态规划”,都要分析状态转移函数,看看“降维”前后到底涉及哪些状态,不在这个状态集合里的函数值都可以舍去、释放内存。如果仍然要用递归来解,那么就需要引入中间态辅助函数,计算“梯形”的函数值。原创 2024-02-01 23:02:35 · 1087 阅读 · 0 评论 -
数据结构+算法(第06篇):再不会“降维打击”你就Out了!
而递归思想是逆向归纳逻辑,即:当前问题的求解是否可以由规模小一点的问题求解叠加而来,后者是否可以再由更小一点的问题求解叠加而来……回到本题,如果应用上面的一般版图示,那么降维前的状态就是台阶数为n的情况,降维后的状态就是台阶数分别为。在本题中,显然规模因子最小的状态就是台阶的级数为1的状态,此时显然种数为1(爬1级到到第1级台阶)。按照上面递归思想的图示,求状态转移函数,就是构造规模n-1的解映射到规模n的解的函数。联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-02-01 20:56:10 · 862 阅读 · 0 评论 -
数据结构+算法(第05篇):数组和链表
如果要到3号车厢,先进入1号车厢(入口车厢),再从1号车厢的后向挂钩到达2号车厢,最后从2号车厢的后向挂钩到达3号车厢。变通的办法,还是在顶楼加,然后让从欲插入的楼层开始的住户依次往上一楼层搬家,腾出当前层给你这个调皮的同学住!你按下楼层号(输入下标),电梯就直接把你送到对应的楼层(访问对应的数组元素),就这么简单!如果不提前“系住”,那么一旦2号车厢与3号车厢分离,我们就再也没有有效办法到达3号车厢了。顶楼就是数组的末尾元素,所以向数组中添加元素,就是在数组的尾巴上添加该元素。当然是在顶楼上继续加喽!原创 2024-02-01 10:27:18 · 1253 阅读 · 0 评论 -
数据结构+算法(第04篇):空间复杂度你真的懂了吗?
这部分内存分配是用于全局变量和常量的,识别出这些变量类型,并计算出对应的大小,也就得到了该部分内存分配的需求量。从上面的分析可以看出:外存的需求量取决于访问的文件内容大小,后者又和涉及的内存大小相关。动态视角:程序在运行时,对外存的需求大小(比如,在进行大数据处理时,将中间结果暂存到外存,腾出内存空间来做计算)不同算法实现的程序的二进制可执行映像的大小,只要不是太烂,通常来说,不会有量级上的差别。作用是把内存中装载的数据放到文件中去,对文件大小的占用就反映了对外存的需求量。原创 2024-02-01 10:20:30 · 882 阅读 · 0 评论 -
数据结构+算法(第03篇):KO!大O——时间复杂度
注:因为在同一硬件条件、特定的编程语言环境下,基本语句由多少条指令构成、运行的模式都是固定的,所以直接以语句作为基本考察单位即可。大部分的算法或者复杂度理论的书籍,在介绍大O时,要么过于数学形式化,要么过于感性非严格化。通常意义上的算法指的是软件算法,所以在谈论时间复杂度时,聚焦软件的时间开销。即:同等输入规模下,第一种算法的时间开销是第二种算法时间开销的2倍。算法复杂度的大O表示可以简化为该算法最高阶部分的复杂度的大O表示。T的增加速度越快,对应算法的时间开销越大,也就表示该算法越复杂。原创 2024-02-01 10:16:22 · 1162 阅读 · 0 评论 -
数据结构+算法(第02篇):玩扫雷就是优化算法
要得到这样的效果,显然我们需要一种性质——这种性质必须是容易获得的:要么可以直接从当前数据中获取,要么可以通过已有方法(算法)获取。数据的摘取:并不是所有的名词和量词都是有效数据。在同一列的方格都不用计算了,显然,按照对角线方向来遍历,每遍历一个方格,就可以避开一排或者一列的方格,感觉就像在玩扫雷游戏:)但是这个算法要穷尽所有可能性,所以带来的时间和空间开销通常都是巨大的,用上篇文章的术语来讲,就是计算复杂度贼高。取代之前的候选结果,作为新的候选结果,待所有的遍历结束,最终的候选结果就是所要求的解。原创 2024-02-01 10:11:58 · 1056 阅读 · 0 评论 -
数据结构+算法(第01篇):走下神坛吧!算法
如前面所说的,算法的本质是解决某类问题的方法,而程序或者代码只是方法的一种表达形式而已。好了,既然现在你已经对算法有了大致的感性认识,那么接下来根据人类的学习习惯,就需要来看看抽象的算法概念,在现实里到底“长什么模样”。为了不落入俗套,本文不会重复wiki上“算法”的官方定义,而采用启发式结构来阐述算法的本质,试想平时在遇到问题的时候,我们是如何解决的。算法的本质就是方法,既然是方法,就是一系列的操作;从上一段的阐述来看,这个主体貌似是算法,但是我们注意,算法不是凭空去运行的,是要在计算机上运行的。原创 2024-02-01 10:04:44 · 811 阅读 · 0 评论 -
和为S的连续正数序列
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 09:12:52 · 310 阅读 · 0 评论 -
数组中只出现一次的数字
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 09:11:27 · 392 阅读 · 0 评论 -
平衡二叉树
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 09:10:01 · 356 阅读 · 0 评论 -
二叉树的深度
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 08:54:17 · 343 阅读 · 0 评论 -
数字在排序数组中出现的次数
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 08:51:52 · 440 阅读 · 0 评论 -
两个链表的第一个公共结点
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 08:50:23 · 302 阅读 · 0 评论 -
数组中的逆序对
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 08:48:52 · 247 阅读 · 0 评论 -
第一个只出现一次的字符
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 08:47:05 · 450 阅读 · 0 评论 -
丑数是什么鬼?
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 08:45:14 · 462 阅读 · 0 评论 -
把数组排成最小的数
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 08:42:27 · 332 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-31 08:40:47 · 397 阅读 · 0 评论 -
连续子数组的最大和
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-30 08:42:23 · 481 阅读 · 0 评论 -
二叉搜索树与双向链表
总结:递归是二叉树问题的核心,递归写起来简单,理解起来难,而且要一步步讲出来的话,越描述到下面,越难描述,所以后面我就没有继续描述了,因为递归中的一步步回归是真的麻烦.后面的代码我就我具体分析了,后面基本上就是将根结点加入到该左孩子链表的尾部,然后一样的方式去递归右孩子双向链表,把根结点放到链表头就可以了;将p的父节点pRootOfTree,加到p的右节点, 将p放到pRootOfTree左结点,这样就形成了双向链表;节点7没有左右孩子,直接返回节点7,right=节点7;永远要记住:不积跬步无以至千里!原创 2024-01-30 08:40:37 · 862 阅读 · 0 评论 -
最小的K个数
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-30 08:35:38 · 402 阅读 · 0 评论 -
数组中出现次数超过一半的数字
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-30 08:33:54 · 666 阅读 · 0 评论 -
二叉搜索树与双向链表
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-30 08:31:17 · 994 阅读 · 0 评论 -
复杂链表的复制
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-30 08:28:53 · 894 阅读 · 0 评论 -
二叉树中和为某一值的路径
第一个if对其跟结点的左孩子群进行判断,进来之后把4当成跟结点,而且现在的target整数,应该是target-root.val;然后继续,进来之后又是进行if语句的判断,发现值还是不满足第一个if(说明还没有到叶子结点),进行深入到结点5,发现已经到了叶子结点也就是满足了第一个if的判断进入发现,值并不满足target==root.val,那就不是我们要找的路径,不加入到paths中,然后递归回来,递归根结点4的右孩子,结点3是叶子结点,进入if语判断发现target=root.val;原创 2024-01-30 08:26:36 · 993 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-30 08:02:03 · 303 阅读 · 0 评论 -
从上往下打印二叉树
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-30 07:54:06 · 460 阅读 · 0 评论 -
栈的压入、弹出序列
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-30 07:51:34 · 317 阅读 · 0 评论 -
包含min函数的栈
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-29 20:30:35 · 421 阅读 · 0 评论 -
顺时针打印矩阵
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-29 20:28:56 · 225 阅读 · 0 评论 -
二叉树的镜像
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-29 20:27:07 · 230 阅读 · 0 评论 -
树的子结构
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-01-29 20:25:34 · 373 阅读 · 0 评论 -
合并两个排序的链表
假设第一次list1.val的值大于等于list2.val的值,是不是当前list2作为第一个结点,这个理解了的话,是不是现在整条合并链就确定了第一个结点了,那么整体思想来看,后面我们只需要对list1和list2.next两条链表进行排序了;中间省略重复的,一直到比较list1.val(10)原创 2024-01-29 20:23:15 · 1000 阅读 · 0 评论
分享