
数据结构和算法
文章平均质量分 93
对于一些常见的数据结构和算法的学习心得
正义的伙伴啊
生活近看虽像悲剧,远看则是喜剧
展开
-
数据结构——树状数组
原题的连接最近刷leetcode的每日一题的时候,遇到了一个区间查询的问题,使用了一种特殊的数据结构树状数组,学习完之后我不禁感叹这个数据结构设计的巧妙,下面是我的学习笔记。树状数组 实际上是对前缀和的优化,前缀和计算的是[0,i]的和,如果一个修改就要对所有的区间和修改,但是树状数组将区间的长度通过lowbit的巧妙构造,使得每次单点修改所要更新的区间和始终不超过O(logN)。单点更新区间查询然后默写树状数组的时候牢记三个规律,AC这类题应该没有多大问题。原创 2023-11-19 16:03:17 · 756 阅读 · 3 评论 -
哈希表
在上一篇博客map和set我们详细的介绍了以红黑树为底层的数据结构,本篇博客论述的哈希这种数据结构实际上是和的数据结构的底层。哈希实际上是一种映射关系,map和set实际上在搜索的时候对树进行遍历,理论上的时间复杂度是O(log2N),但是哈希是可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。原创 2023-03-09 14:26:34 · 1929 阅读 · 3 评论 -
红黑树的原理+实现
红黑树是一个近似平衡的搜索树,关于近似平衡主要体现在最长路径小于最短路径的两倍(我认为这是红黑树核心原则),为了达到这个原则,红黑树所有节点都增加了一个存储位表示节点的颜色(红或黑),并规定了一些性质来达到“近似平衡”原创 2023-02-16 18:10:23 · 3524 阅读 · 4 评论 -
AVL树的 插入 和 删除
AVL树的 插入 和 删除原创 2022-03-11 16:30:15 · 2230 阅读 · 6 评论 -
二叉搜索树(BinarySearchTree)
二叉搜索树(BinarySearchTree)文章目录二叉搜索树(BinarySearchTree)二叉搜索树的概念如何定义 二叉搜索树的节点 && 二叉搜索树查找插入删除二叉搜索树的缺点二叉搜索树的应用二叉搜索树的概念搜索二叉树满足一下条件:是一棵二叉树这可树上的任意一个节点满足:若他的右子树不为空,则右子树上的所有节点的值大于该节点的值这可树上的任意一个节点满足:若他的左子树不为空,则左子树上的所有节点的值小于该节点的值它的的左子树和右子树也是二叉搜索树例如下图就是一原创 2022-03-05 17:53:44 · 1824 阅读 · 12 评论 -
二叉树 详解
文章目录二叉树树 概念及结构树的概念二叉树树 概念及结构树的概念原创 2021-09-18 21:24:47 · 379 阅读 · 4 评论 -
数据结构:堆 的详解
堆文章目录堆堆的概念及结构堆的性质堆的实现向下调整算法(小根堆)代码向上排序算法代码堆的创建堆的增加元素堆减少元素堆的应用堆排序TopK问题堆的概念及结构如果有一个关键码的集合k={k0,k1,k2…,kn-1},把他们的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki<K(2i+1) 且 Ki<=K(2i+2) (或Ki>=K(2i+1) 且Ki>=K (2i+2) ) i=1,2,…,则称为小堆(大堆)。将根节点最大的堆叫做对大堆或大根堆,根节点最小原创 2021-09-05 14:57:49 · 7427 阅读 · 2 评论 -
算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度文章目录算法的时间复杂度和空间复杂度算法的效率时间复杂度空间复杂度算法的效率如何衡量一个算法的好坏呢?一个算法如果写的十分的短,是不是就非常的好呢?例如斐波那契数列:long long Fib(int N){ if (N < 3) return 1; return Fib(N - 1) + Fib(N - 2);}实际上斐波那契数列的函数是最铸币的算法,随着N不断增大(大概到30),计算机就有可能计算不出来了。那么我们要用什么方式去衡量一个算法的原创 2021-09-05 14:59:46 · 950 阅读 · 1 评论 -
链表OJ题之——合并有序链表
文章目录初级题目:进阶题目初级题目:题目链接:leetcode思路:创建一个新的头指针和两个分别指向链表的指针l1、l2,对两个指针所指向的值进行比较,将小的值的节点给新的头节点。直到第一个指针到达结尾,将另外一个指针指向的剩余内容给到新的链表。以题目中给的链表为例:创建好链表第一步:第二步:第三步:第四步:第五步:第六步:特殊情况考虑:当l1或l2中有一个为空指针时,直接返回另外一个指针就行了struct ListNode* mergeTwoLists(stru原创 2021-09-05 20:27:39 · 341 阅读 · 5 评论 -
关于旋转链表的OJ题的一些总结
旋转链表OJ题文章目录旋转链表OJ题引入问题解法一代码解法二(简化)代码问题提升代码:引入问题原题链接给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解法一刚开始做这题我用的是最铸币的方法,也是最容易想到的方法,多指针方法,然后通过循环遍历整个链表,这里的循环条件使n3不为NULL设置4个指针分别指向要交换的两个节点和下一个要交换的两个节点接下来这部就是进行交换,但是注意n1要指向n3,因为n3是下一个交换过原创 2021-08-25 12:12:07 · 380 阅读 · 7 评论 -
数据结构:队列 和 栈 的详解
文章目录栈栈的结构和概念栈的实现栈的实现:栈的一些引用括号匹配问题队列队列的概念和结构队列的实现此外还要介绍一种队列:循环队列栈栈的结构和概念栈 :一种特殊的线性表,其中只允许在固定的一端进行插入和删除元素。进行数据插入和删除操作的一段称为栈顶,另一端称为栈底 。栈中的元素遵循先进后出的原则。压栈:栈的插入操作叫做 进栈/入栈/压栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。 栈的实现栈的实现一般可以使用数组或者链表,但是数组的结构要更优一点。因为数组在原创 2021-09-12 14:40:00 · 647 阅读 · 4 评论 -
详解 八大排序
排序文章目录排序排序的概念直接插入排序希尔排序选择排序堆排序快速排序归并排序计数排序排序的概念排序 :所谓排序就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作排序的稳定性: 用简单的话来说就是时间复杂度随着目标序列的变化,而不出现较大变化的排序稳定性较好,发生较大变化的稳定性较差同时 还有两个比较基础的概念:内部排序: 数据元素全部放在内存中的排序外部排序: 数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序直接插入排序插入排序的原创 2021-09-25 16:07:29 · 2301 阅读 · 18 评论 -
kmp算法
kmp算法原创 2021-10-25 16:00:43 · 426 阅读 · 8 评论