
数据结构与算法
Xyz_zh
这个作者很懒,什么都没留下…
展开
-
【数据结构】动态数组
数组的长度在定义变量的时候便需要指定,并且只能是一个常数,不能是其它变量。所以,一旦定义了一个数组,系统将为它分配一个固定大小的空间,以后都不能改变,这样的数组称为静态数组。但在某些时候,我们需要的数组的长度是无法预先确定的,要解决这样的限制,就需要使用动态数组。 以下是我用java代码自己手动实现的动态数组的扩容和缩小。 数组类型使用...原创 2018-11-25 10:40:27 · 241 阅读 · 0 评论 -
【数据结构】深入分析红黑树
目录一、为什么要学习红黑树?二、红黑树的基本介绍三、图解+代码实现红黑树添加元素流程首先分析向2-3树中的2节点插入元素1.插入左孩子2.插入右孩子接下来分析向2-3树中的3节点插入元素1.插入右孩子(颜色反转filpColors)2.插入左孩子(右旋转)四、总结红黑树的添加元素过程①:向2-3树的2节点添加元素(分为插入的元素是左孩子还是右孩子)...原创 2019-07-05 00:30:49 · 486 阅读 · 0 评论 -
【数据结构】图解2-3树(学习红黑树、B树的基础)
一、基本介绍2-3树:满足二分搜索树的基本性质,是一颗绝对平衡的树,节点可以存放一个或两个元素,每个节点有2个或3个孩子(如果对二分搜索树不太了解,可以去看这篇文章【数据结构】二分搜索树小结) 如下图所示都是2-3树,左边是节点存放了一个元素,右边是节点存放了两个元素,对于右边的图,左子树<b,中间的孩子树则在b、c之间,右孩子则大于c。 ...原创 2019-07-03 14:39:14 · 1076 阅读 · 1 评论 -
【数据结构】平衡二叉树AVL
一、基本概念 之前在分析二分搜索树时,就提出了一个问题,如果向二分搜索树插入顺序的元素就会形成下图,这样就会造成查询效率低等问题,这时就需要引入平衡二叉树解决此类问题,如果对二分搜索树不了解建议先去看看这篇文章【数据结构】二分搜索树小结平衡二叉树:本质上是一颗二叉查找树对于任意一个节点,平衡因子不能超过1,下图就是一颗平衡二叉树平衡因子: 左子树和右子树的高度差...原创 2019-07-03 00:14:56 · 543 阅读 · 0 评论 -
【数据结构】通过Trie字典树实现敏感词过滤
一、基本概念 Trie字典树主要用于存储字符串,Trie的每个Node保存一个字符。用链表来描述的话,就是一个字符串就是一个链表。每个Node都保存了它的所有子节点。 如下图所示,根节点不包含任何信息。每个节点表示一个字符串中的字符,从根节点到红色节点的一条路径表示一个字符串。红色节点不一定是叶子节点。 使用Trie这种数据结构存储字符串,查询每个字...原创 2019-07-01 18:47:41 · 1367 阅读 · 2 评论 -
【数据结构】堆和优先队列
目录一、堆二、优先队列一、堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是: ...原创 2019-05-07 23:27:16 · 497 阅读 · 0 评论 -
【数据结构】二分搜索树小结
一、基本概念二分搜索树:(又:二分查找树,二叉排序树)它或者是一棵空树,或者是具有下列性质: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。...原创 2019-04-07 20:29:00 · 349 阅读 · 0 评论 -
【Java代码实现】面试常见七大排序详解
一、基本介绍十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现...原创 2019-04-02 22:16:46 · 1547 阅读 · 0 评论 -
【动态规划】lettcode120 三角形最小路径和
: 首先记住:动态规划问题,最重要的就是找到状态转移方程,而状态转移方程很重要的一点就是明确函数的意义所在,以及记录结果的数据结构。 我们从上往下想,对于第一层的结点[0][0]它与第二层相邻的结点是[1][0],[1][1] 对于第二层的结点[1][0]...原创 2019-03-11 22:20:32 · 254 阅读 · 0 评论 -
【leetcode】11. 盛最多水的容器
这道第一眼看过去感觉应该是道难题,但只要认真分析下便可做出来。看着上面图片就可以知道,容纳水量最多其实就是(j-i)*min(aj,ai),其中j和i为这两条垂直线的横坐标,aj和ai为其纵坐标。解法一:暴力法 直接两个for循环在其中使用上面推导出的共识判断 时间复杂度:O(n^2) 空间...原创 2018-11-26 22:04:45 · 126 阅读 · 0 评论 -
【数据结构】初步认识B、B+树
在学习B树前,如果没有2-3树的基础,建议先去学习一下2-3树会更好理解B树图解2-3树(学习红黑树、B树的基础)首先需要明白B树就是B-树,因为B树的原英文名称为B-tree,所以很多人把B树又叫做B-树,这就导致很多人以为B树分为:B-、B、B+树三种,其实英文中B-Tree中的“-”不是减号,只是一个横杠的意思,就好比B+树英文为B+-tree.明白了基本概念后,对B树进行一个基本的...原创 2019-07-06 18:05:55 · 288 阅读 · 0 评论