摘要: 四种排序:堆排序、基数排序、桶排序、计数排序 堆排序 堆构建 首先堆是一种完全二叉树,使用数组构建,那么可以很容易得出,节点i的左子节点为i2,右子节点为i2+1。 构建堆的算法描述:我们需要确保每个节点满足堆的定义即可,因为所有叶子节点自然满足,所以我们从最后一个有子节点的节点开始调整,对于该节点 阅读全文
posted @ 2024-01-08 14:09 hexiang| 阅读(32) 评论(0) 推荐(0)
摘要: 二叉树深度遍历 中序遍历 public List<Integer> inorderTraversal(TreeNode root) { //创建一个答案数组 List<Integer> ans = new ArrayList<>(); //创建一个双向链表,用作栈 Deque<TreeNode> s 阅读全文
posted @ 2024-01-07 10:55 hexiang| 阅读(22) 评论(0) 推荐(0)
摘要: 快速排序 双指针 分治 void quick_sort(int q[], int l, int r) { //递归的终止情况 if(l >= r) return; //第一步:分成子问题 int i = l - 1, j = r + 1, x = q[l + r >> 1]; while(i < j 阅读全文
posted @ 2024-01-06 13:38 hexiang| 阅读(9) 评论(0) 推荐(0)
摘要: KMP算法能够高效地匹配字符串,找出子串(T串)在主串(S串)中出现的首个位置的原算法网上已经有很多优秀的博文进行详细讲解,这里就不多赘述。 这篇博文主要是对KMP原算法稍作改动,使其能够在主串中把所有匹配的主串找出来。 找出首个匹配的算法好弄,next数组求出来后直接用来匹配,直到出现完全匹配的情 阅读全文
posted @ 2021-09-02 22:27 hexiang| 阅读(262) 评论(0) 推荐(0)
摘要: Dijkstra算法采用的是一种贪心的策略,声明一个数组dist来保存源点到各个顶点的最短距离和一个保存已经找到了最短路径的顶点的集合:T,初始时,原点 s 的路径权重被赋为 0 (dist[s] = 0)。若对于顶点 s 存在能直接到达的边(s,m),则把dist[m]设为w(s, m),同时把所 阅读全文
posted @ 2021-06-09 21:18 hexiang| 阅读(116) 评论(0) 推荐(0)
摘要: 1.什么是内存抖动? 页面的频繁更换,导致整个系统效率急剧下降,这个现象称为内存抖动。 抖动一般是内存分配算法不好,内存太小引或者程序的算法不佳引起的页面频繁从内存调入调出。 阅读全文
posted @ 2021-06-09 18:53 hexiang| 阅读(85) 评论(0) 推荐(0)
摘要: 首先利用结构体存边,排序(快排,或者建堆),遍历所有边,利用并查集判断边两个端点是否在同一个集合中。 acwing-859 #include<bits/stdc++.h> using namespace std; const int N = 100010; struct edge{ int a, b 阅读全文
posted @ 2021-06-09 18:50 hexiang| 阅读(47) 评论(0) 推荐(0)
摘要: bfs(宽度优先搜索)利用队列 void BFS(Graph G, int num) //num为从该点开始进行搜索 { queue<int>Queue; cout << num <<" "; visit[num] = 1; Queue.push(num); //访问完该点后入队列 while (! 阅读全文
posted @ 2021-06-09 18:45 hexiang| 阅读(162) 评论(0) 推荐(0)
摘要: 分析:因为前序(根左右)最先出现的总是根结点,所以令root为前序中当前的根结点下标(并且同时把一棵树分为左子树和右子树)。start为当前需要打印的子树在中序中的最左边的下标,end为当前需要打印的子树在中序中最右边的下标。递归打印这棵树的后序,递归出口为start > end。i为root所表示 阅读全文
posted @ 2021-06-09 18:40 hexiang| 阅读(389) 评论(0) 推荐(0)