- 博客(123)
- 资源 (1)
- 收藏
- 关注
原创 SP1684 FREQUENT - Frequent values(ST表)
【代码】SP1684 FREQUENT - Frequent values(ST表)
2024-03-24 10:52:40
712
原创 P2880 [USACO07JAN] Balanced Lineup G(树状数组(单点修改+区间查询))
【代码】P2880 [USACO07JAN] Balanced Lineup G(树状数组(单点修改+区间查询))
2024-03-21 10:51:58
391
原创 P5057 [CQOI2006] 简单题(树状数组(单点查询+区间修改))
【代码】P5057 [CQOI2006] 简单题(树状数组(单点查询+区间修改))
2024-03-21 09:37:37
176
原创 计数排序(计数排序)
题目链接:计数排序考查知识:计数排序题意描述:对n个整数进行计数排序相关知识:计数排序用空间换时间,非比较排序,排序的速度快于任何比较排序算法。步骤:(1)找出待排序的数组中最大和最小的元素(2)统计数组中每个值为i的元素出现的次数,存入数组C的第i项(3)对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)(4)反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1局限性:1.当数列最大最小值差距过大时,并不适用于计数排..
2022-05-08 10:11:08
341
原创 基数排序(基数排序)
题目链接:基数排序考查知识:基数排序题意描述:对n个整数进行基数排序相关知识:基数排序基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。性能分析时间复杂度:平均时间复杂度为O(nd)O(nd)O(nd),d为位数空间复杂度:用到了长度为n的辅助数组,因此空间复杂度为O(r+n)O(r+n)O(r+n),r为基数算法稳定性:稳定.
2022-05-06 08:35:32
290
原创 归并排序(归并排序)
题目链接:归并排序考查知识:归并排序题意描述:对n个整数进行归并排序相关知识:归并排序将数组不断地划分成两部分,当划分为两个数组个数为1的数组时,也就是说这两个数组有序不断的对这两个有序数组进行合并性能分析时间复杂度:平均时间复杂度为O(nlogn)O(nlogn)O(nlogn)空间复杂度:用到了长度为n的辅助数组,因此空间复杂度为O(n)O(n)O(n)算法稳定性:稳定具体代码#include<bits/stdc++.h>usi..
2022-05-05 21:25:16
275
原创 堆排序(堆排序)
题目链接:堆排序考查知识:堆排序题意描述:对n个整数进行堆排序相关知识:堆排序堆是一颗完全二叉树,可由空堆向上调整,逐个插入元素,来建立初始堆, 或向下调整是从n/2的位置,倒着将编号n/2,n/2-1,…,1直到编号为1的结点调成堆从小到大排序则建立小顶堆,然后交换堆首堆尾,然后令堆元素数量减一,从根开始向下调整堆性能分析时间复杂度:平均时间复杂度为O(nlogn)O(nlogn)O(nlogn)空间复杂度:需要一个临时变量存储待排序元素,因此空间复杂度为O(..
2022-05-05 20:18:26
592
原创 简单选择排序(简单选择排序)
题目链接:简单选择排序考查知识:简单选择排序题意描述:对n个整数进行简单选择排序相关知识:简单选择排序都是在无序的部分里选择一个最大的(或最小的)加入有序部分的一端,个人理解:对比选择类排序里的简单选择排序和交换类排序里的冒泡排序,发现两者都是每次将无序部分的最值移到有序部分的末端不同的是一趟排序中选择类冒泡排序需要两两交换数组值来达到将无序部分最值移到有序部分的末端,而选择类简单选择排序则是记录无序部分里最值的下标仅一次交换将无序部分最值移到有序部分的末端性能分析时.
2022-05-05 20:01:26
242
原创 快速排序(快速排序)
题目链接:快速排序考查知识:快速排序题意描述:对n个整数进行快速排序相关知识:快速排序从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;性能分析时间复杂度:平均时间复杂度为O(nlog..
2022-05-05 17:29:20
188
原创 冒泡排序(冒泡排序)
题目链接:冒泡排序考查知识:冒泡排序题意描述:对n个整数进行冒泡排序相关知识:冒泡排序相邻关键字两两进行比较,将大的关键字放到最后。性能分析时间复杂度:平均时间复杂度为O(n2)O(n^2)O(n2)空间复杂度:需要一个临时变量存储待排序元素,因此空间复杂度为O(1)O(1)O(1)算法稳定性:稳定具体代码#include<bits/stdc++.h>using namespace std;const int N=1e3;int..
2022-05-05 17:07:20
233
原创 希尔排序(希尔排序)
题目链接:希尔排序考查知识:希尔排序题意描述:对n个整数进行希尔排序相关知识:希尔排序直接插入排序的优化,一般用逐步折半的增量方法进行直接插入排序(希尔增量)性能分析时间复杂度:因为增量的取值方法很多,因此希尔排序的时间复杂度都不固定空间复杂度:需要一个临时变量存储待排序元素,因此空间复杂度为O(1)O(1)O(1)算法稳定性:不稳定具体代码#include<bits/stdc++.h>using namespace std;co..
2022-05-05 16:23:19
290
原创 折半插入排序(折半插入排序)
题目链接:折半插入排序考查知识:折半插入排序题意描述:对n个整数进行折半插入排序相关知识:折半插入排序直接插入排序的优化,仅仅优化了"在有序中查找合适的位置"这一步,未优化移动这一步,也未能使时间复杂度脱离O(n^2)性能分析时间复杂度:平均时间复杂度为O(n2)O(n^2)O(n2)空间复杂度:需要一个临时变量存储待排序元素,因此空间复杂度为O(1)O(1)O(1)算法稳定性:稳定具体代码#include<bits/stdc++.h>..
2022-05-05 15:55:59
949
原创 直接插入排序(直接插入排序)
题目链接:直接插入排序考查知识:直接插入排序题意描述:对n个整数进行直接插入排序相关知识:直接插入排序将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)性能分析时间复杂度:平均时间复杂度为O(n2)O(n^2)O(n2)空间复杂度:需要一个临时变量存储待排序元素,因此..
2022-05-05 15:45:37
961
原创 261. 以图判树(并查集)
题目链接:261. 以图判树考查知识:并查集题意描述:给定编号从0到n-1的 n 个结点,和n条边,判断该图是否是一棵树思路简析:用并查集判断是否是联通图,并在一开始建立并查集时图中是否判定环联通但无环可认为是一棵树具体代码class Solution {public: int fa[2020]; void init(int n){ for(int i=1;i<=N;i++)//[1,N] fa[i]=i; } int find(int x){ if(.
2022-05-03 10:28:00
473
原创 1102 迷宫问题(BFS+最短路径)
题目链接:1102 迷宫问题考查知识:BFS+最短路径题意描述:小明置身于一个迷宫,只能向上下左右四个方向移动,且迷宫中存在障碍请找出从起点到终点的最短路程。思路简析:使用STL的queue时,元素入队的push操作只是制造了原数据a的一个副本,所以q.front()和a修改其中任何一个不会影响到另外一个,所以若要对队列中元素进行修改而不仅仅是访问时,队列中存放的元素最好不是元素本身,而是它们的编号(或数组下标)BFS求无权图最短路径,每次访问当前位置的四个方位,将可以访问且未访.
2022-05-03 09:55:45
596
原创 自底向上的赫夫曼编码(模拟+哈夫曼树+哈夫曼编码)
题目链接:自底向上的赫夫曼编码(模拟+哈夫曼树+哈夫曼编码)考查知识:模拟+哈夫曼树+哈夫曼编码题意描述:读入n个字符所对应的权值,生成赫夫曼编码,并依次输出计算出的每一个赫夫曼编码。思路简析:哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。.
2022-04-29 20:54:54
551
原创 哈夫曼树(模拟+哈夫曼树+最小WPL)
题目链接:哈夫曼树考查知识:模拟+哈夫曼树+最小WPL题意描述:给定叶结点的个数以及各个叶结点的出现频率,需要用这些叶结点生成哈夫曼树,输出哈夫曼树的最小路径长度WPL思路简析:哈夫曼树: 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。带权路径长度WPL:叶结点的带权路径长度=该结点的权值 ×该结点的深度二叉树..
2022-04-29 20:23:06
1526
原创 平衡二叉树的基本操作(AVL树+插入+查找)
题目链接:平衡二叉树的基本操作考查知识:AVL树+插入+查找题意描述:共有n个整数和k次查询,用给定的n个整数进行建树,然后k次查询给定权值的结点是否在AVL树中具体代码#include<bits/stdc++.h>using namespace std;const int N=1e3;int a[N];struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(i.
2022-04-29 19:58:03
843
原创 二叉搜索树(二叉搜索树+插入+判两棵BST相同)
题目链接:二叉搜索树考查知识:插入+判两棵BST相同题意描述:判断两序列是否为同一二叉搜索树序列思路简析:建立两棵BST,进行对比即可递归地进行对比,子树根结点有空和不空两种情况,那么两棵BST根结点就有空空,不空空,空不空,不空不空,四种情况;易知空空两棵BST是相同的,不空空,空不空,不空不空但结点权值不相等两棵BST是不同的,剩余不空不空但结点权值相等则需要递归判断左右子树具体代码#include<bits/stdc++.h>using namespace.
2022-04-29 19:47:00
445
原创 二叉排序树(二叉搜索树+插入+前/中/后序遍历)
题目链接:二叉排序树考查知识:二叉搜索树+前/中/后序遍历题意描述:输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。思路简析:按要求建立二叉搜索树并依次进行前/中/后序遍历即可注意建树的时候,对于相同权值的结点只插入二叉搜索树一次具体代码#include<bits/stdc++.h>using namespace std;#include<bits/stdc++.h>using namespace std;const int N=1e3.
2022-04-29 19:33:34
971
原创 1382. 将二叉搜索树变平衡(AVL树 + 插入)
题目链接:1382. 将二叉搜索树变平衡考查知识:AVL树 + 插入题意描述:给定一棵二叉搜索树,返回一棵AVL树思路简析:直接写一棵AVL树,但递归算节点高度会超时具体代码class Solution {public: int height(TreeNode *root){//计算子树高度 if(root==NULL)return 0;//子树不存在,高度为0 else return max(height(root->left),height(root->right).
2022-04-27 22:50:56
425
原创 110. 平衡二叉树(AVL树 + 判定)
题目链接:110. 平衡二叉树考查知识:AVL树 + 判定题意描述:给定一棵二叉树,判定其是否是AVL树思路简析在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们在1962年的论文《An algorithm for the organization of inform.
2022-04-27 21:06:58
550
原创 剑指 Offer 54. 二叉搜索树的第k大节点(二叉搜索树+中序遍历)
题目链接:剑指 Offer 54. 二叉搜索树的第k大节点考查知识:二叉搜索树+中序遍历题意描述:给定一棵二叉搜索树,请找出其中第 k 大的节点的值。思路简析二叉树的结点的中序遍历是递增的,找出其中第k大即找出该中序序列倒数k个元素即可中序遍历 为 “左、根、右” 顺序,易知中序遍历的倒序 为 “右、根、左” 顺序,我们求中序序列倒数k个元素就可转化为求这个倒序的正着数第k个元素即可具体代码class Solution { int kk,ans;public: void inord.
2022-04-27 18:36:50
278
原创 450. 删除二叉搜索树中的节点(二叉搜索树+删除)
题目链接:450. 删除二叉搜索树中的节点考查知识:二叉搜索树+删除题意描述:给定二叉搜索树和要删除树中的值,在BST删除中删去该结点思路简析二叉树删除操作1 .叶子节点:直接删除,不影响原树。2 .仅仅有左或右子树的节点:节点删除后,将它的左子树或右子树整个移动到删除节点的位置就可以,子承父业。3 .既有左又有右子树的节点:找到须要删除的节点p的直接前驱或者直接后继s,用s来替换节点p,然后再删除节点s。注意二叉树搜索树的查找,插入,删除操作树不唯一以下代码实现与上面略有不同.
2022-04-27 17:44:42
239
原创 701. 二叉搜索树中的插入操作(二叉搜索树+插入)
题目链接:701. 二叉搜索树中的插入操作考查知识:二叉搜索树+插入题意描述:给定二叉搜索树和要插入树中的值,在BST正确的位置插入具体代码方法一:递归与二叉搜索树的递归写法类似,在查找失败处新建结点即可class Solution {public: TreeNode* insertIntoBST(TreeNode* root, int val) { if(root==NULL)return new TreeNode(val);//递归边界 if(root->.
2022-04-27 16:46:02
287
codeblocks-20.03mingw-nosetup.zip 免安装版(0积分)
2020-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2