数据结构
文章平均质量分 61
soyisou
码农,砖家,斜杠青年
展开
-
并查集及应用
并查集用途1. 将两个集合合并2. 询问两个元素是否在一个集合当中基本原理每个集合用一棵树来表示,树根的编号就是整个集合的编号每个节点存储它的父节点,p[x]表示x的父节点主要问题1. 如何判断树根: if(p[x] == x) 则为树根;2. 如何求x的集合编号:while(p[x] != x) x = p[x];核心函数int find(int x){//返回x的祖宗结点 + 路径压缩 if(p[x] != x) p[x] = find(p[x]); return p[原创 2021-08-18 18:05:12 · 85 阅读 · 0 评论 -
手写堆操作
手写堆操作1. 插入一个数: heap[++ size] = x, up(size)2. 求集合当中的最小值, heap[1]3. 删除最小值, heap[1] = heap[size], size --, down(1)4. 删除任意元素, heap[k] = heap[size], size --, down(k), up(k)5. 修改任意元素, heap[k] = x, down(k), up(x)基本操作void down(int u){ int t = u; if(原创 2021-08-18 18:03:21 · 70 阅读 · 0 评论 -
二分法总结
二分法小结:思想:在一个区间进行二分,每次都要选择答案所在的区间进行处理,亦即每次的区间都会把答案覆盖掉,每一次都能保证我们的区间有答案。二分的时候我们一定会保证这个区间是有答案的,那么当区间长度是1时,这个区间里的数就是答案。二分和单调性的关系:有单调性的一定可以二分,但可以二分的不一定有单调性,即没有单调性也可以二分。二分和题解的关系:我们二分的时候一定是有解的。如果是无解,和题目是有关的,而与二分模板无关。无解并不是在二分中是无解,而是我们二分完后通过这个性质可以判断出原问题无解。原创 2021-08-18 17:58:53 · 376 阅读 · 0 评论 -
反转链表(有无、头指针小结)
题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000无头结点(两种方式)C ++ 代码1/** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2021-08-18 17:34:08 · 60 阅读 · 0 评论 -
数据结构面试精华整理(考研、保研和工作)
数据结构面试精华整理(考研、保研和工作),全程干货,没有半句废话!原创 2021-08-18 10:37:20 · 1596 阅读 · 0 评论 -
史上超全内部排序大汇总
排序算法目录直接插入排序折半插入排序希尔排序冒泡排序快速排序选择排序归并排序堆排序1. 直接插入排序直接插入排序算法思想将序列分为有序部分和无序部分,从无序部分中依次选择元素,与有序部分进行比较,找到合适的位置,将原来的元素后移,将元素插入到相应的位置,直到全部记录插入完成。动画演示时间复杂度最好 — O(n)O(n)O(n) 序列有序最坏 — O(n2)O(n^2)O(n2) 序列逆序平均 — O(n2)O(n^2)O(n2)空间复杂度 O(1)原创 2021-08-10 15:45:35 · 1480 阅读 · 3 评论