![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 88
应付面试仅此而已
Overboom
这个作者很懒,什么都没留下…
展开
-
[数据结构与算法] ---双指针解数组题目技巧
在处理数组和链表相关问题时,双指针技巧是经常用到的,双指针技巧主要分为两类:对撞指针和快慢指针。在数组中并没有真正意义上的指针,但我们可以把索引当做数组中的指针,这样也可以在数组中施展双指针技巧,本文主要讲数组相关的双指针算法。本文就总结一下数组双指针的基本技巧,每个技巧都对应着至少一道算法题:1、删除有序数组中的重复项2、移除元素3、 两数之和4、 反转数组5、 回文串判断6、 最长回文串12快慢指针3456对撞指针。原创 2024-07-24 10:47:20 · 287 阅读 · 0 评论 -
[数据结构与算法] ---双指针解链表题目技巧
本文就总结一下单链表的基本技巧,每个技巧都对应着至少一道算法题:1、合并两个有序链表2、链表的分解3、合并 k 个有序链表4、寻找单链表的倒数第 k 个节点5、寻找单链表的中点6、判断单链表是否包含环并找出环起点7、判断两个单链表是否相交并找出交点这些解法都用到了双指针技巧,所以说对于单链表相关的题目,双指针的运用是非常广泛的,下面我们就来一个一个看。原创 2024-07-24 08:38:28 · 251 阅读 · 0 评论 -
[基础算法] --- 位运算
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8JUn5T7U-1721627042685)(https://i-blog.csdnimg.cn/direct/552453030c454160ab0a304c60be24ca.png)]原创 2024-07-22 13:44:15 · 890 阅读 · 0 评论 -
[基础算法] --- 递归算法
递归(Recursion):指的是一种通过重复将原问题分解为同类的子问题而解决的方法。在绝大数编程语言中,可以通过在函数中再次调用函数自身的方式来实现递归。举个简单的例子来了解一下递归算法。比如阶乘的计算方法在数学上的定义为:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3plTPNY1-1721614561192)(https://i-blog.csdnimg.cn/direct/f7d5d612e5e1485c8411bd97c58d667c.png)]原创 2024-07-22 10:16:12 · 511 阅读 · 0 评论 -
[基础算法理论] --- 滑动窗口
1 滑动窗口算法介绍在计算机网络中,滑动窗口协议(Sliding Window Protocol)是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。我们所要讲解的滑动窗口算法也是利用了同样的特性。滑动窗口算法(Sliding Window):在给定数组 / 字符串上维护一个固定长度或不定长度的窗口。可以对窗口进行滑动操作、缩放操作,以及维护最优解操作。滑动操作:窗口可按照一定方向进行移动。最常见的是向右侧移动原创 2024-07-22 10:15:08 · 742 阅读 · 0 评论 -
[基础算法理论] --- 双指针
双指针分为「对撞指针」、「快慢指针」、「分离双指针」。对撞指针:两个指针方向相反。适合解决查找有序数组中满足某些约束条件的一组元素问题、字符串反转问题。快慢指针:两个指针方向相同。适合解决数组中的移动、删除元素问题,或者链表中的判断是否有环、长度问题。分离双指针:两个指针分别属于不同的数组 / 链表。适合解决有序数组合并,求交集、并集问题。原创 2024-07-22 10:14:50 · 707 阅读 · 0 评论 -
[基础算法] --- 枚举算法
枚举算法(Enumeration Algorithm):也称为穷举算法,指的是按照问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,将它们逐一与目标状态进行比较以得出满足问题要求的解。在列举的过程中,既不能遗漏也不能重复。枚举算法的核心思想是:通过列举问题的所有状态,将它们逐一与目标状态进行比较,从而得到满足条件的解。由于枚举算法要通过列举问题的所有状态来得到满足条件的解,因此,在问题规模变大时,其效率一般是比较低的。原创 2024-07-19 15:23:44 · 612 阅读 · 0 评论 -
[数据结构] --- 堆
将根节点最大的堆叫做,根节点最小的堆叫做。常见的堆有二叉堆、斐波那契堆等。如下,小堆的父亲节点总是小于其孩子节点,所以小堆的根节点一定是最小的。而大堆的父亲节点总是大于其孩子节点,所以大堆的根节点一定是最大的。Note:现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。原创 2024-07-16 08:48:32 · 825 阅读 · 0 评论 -
[数据结构] --- 线性数据结构(数组/链表/栈/队列)
链表是由一个个结点串联而成的,而每个结点分为两块区域,一块是数据域,相当于数组中存储的那个数据;另一块是指针域,这里存放的是指向下一个结点的地址。//定义结点类型int data;//数据类型,你可以把int型的data换成任意数据类型,包括结构体struct等复合类型//单链表的指针域//Node表示结点的类型,LinkedList表示指向Node结点类型的指针类型栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。原创 2024-07-04 13:18:08 · 507 阅读 · 0 评论 -
[数据结构] --- 树
*二叉树是每个节点最多有两个子树的树结构。**它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。我们知道,实际应用当中,我们经常使用的是查找和排序操作,这在我们的各种管理系统、数据库系统、操作系统等当中,十分常用。数组的下标寻址十分迅速,但计算机的内存是有限的,故数组的长度也是有限的,实际应用当中的数据往往十分庞大;而且无序数组的查找最坏情况需要遍历整个数组;后来人们提出了二分查找,二分查找要求数组的构造一定有序,二分法查找解决了普通数组查找复杂度过高的问题。原创 2024-07-03 13:23:43 · 1118 阅读 · 0 评论 -
[数据结构] --- 哈希表
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度(在此之前的我们都是采用遍历来查找指定元素,当数据量庞大时(亿万级别),挨个遍历就显得很慢,而哈希表可以通过某个函数直接访问到指定元素,这就是哈希表的NB之处)。。原创 2024-07-02 14:03:52 · 908 阅读 · 0 评论 -
[数据结构] --- 八种常见数据结构
数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的,但是我们可以使用指针等道具,构造出类似“树形”的复杂结构。分为八个常见的数据结构。原创 2024-06-28 15:03:48 · 783 阅读 · 0 评论