笔记
old_Bai
举步维艰
展开
-
MD5加密(Javascript实现,可在前端使用)
javas实现md5加密功能模板,仅需将需要加密的字符串传入函数即可md5(string) { function md5_RotateLeft(lValue, iShiftBits) { return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); } function md5_AddUnsigned(lX, lY) { var lX4, lY原创 2022-03-26 17:39:04 · 658 阅读 · 0 评论 -
数组创建二叉树及其四种遍历
*数组创建二叉树即将 index * 2 + 1位置看作左节点,index 2 + 2看作右节点#include<iostream>#include<algorithm>#include<queue>using namespace std;const int N = 1e5 + 5;int tree[N];void BuildTree(int root,string op){ int temp; cin >> temp; if (temp原创 2022-02-15 21:20:34 · 649 阅读 · 0 评论 -
归并排序板子
787. 归并排序给定你一个长度为 n 的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 5#include<iostream>using namespace std;co原创 2022-01-12 16:19:39 · 65 阅读 · 0 评论 -
快速排序板子
间隔许久打算从头开始捋一遍算法,再重新记录一下复习(学习)过程,把背下的板子以博客的形式记录下来,板子源自yls题目:785. 快速排序给定你一个长度为 n 的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样原创 2022-01-12 16:07:47 · 210 阅读 · 0 评论 -
关于在vue中循环生成的单选框调样式问题
在vue循环生成的单选框中,想要调整单选框的样式则需要额外添加一个label,再将input隐藏转而调整label的样式。 input { display: none; } label { width: 10%; height: 100%; display: inline-block; position: relative; color: #999; } label:active { background: #eeeeee; }原创 2021-07-12 10:37:52 · 824 阅读 · 0 评论 -
应用二叉树基本编程
建树操作BTreeNode* BuildBTreeNode(){ // 建树 struct BTreeNode* p; int num; cin>>num; if(num==0) p=nullptr; else{ p=(struct BTreeNode*)malloc(sizeof(struct BTreeNode)); p->data = num; p->l=BuildBT原创 2020-09-15 21:31:57 · 203 阅读 · 0 评论 -
高级数据结构—Trie字典树
在字符串匹配问题中,如在n个字符串里查找某个字符串,如果用暴力搜索,需要逐个匹配每个字符串,复杂度为O(nm),效率十分低。在这里可以使用trie树,也叫字典树,其原理相当于翻字典,如需要查找某个单词,需要先找到其开头字母,再找到其第二个字母,查找任意单词只需要查找这个单词中的字母个数次即可。具体实现(图片源自网络)int trie[1001][26];//树int trie_end[1001] = { 0 };//标记尾节点int tot = 1;//节点数int p;//读取位置具体原创 2020-07-29 14:52:43 · 219 阅读 · 0 评论 -
搜索技术——广度优先搜索(BFS)
广度优先搜索和深度优先搜索是基本的暴力技术,常用于解决图,树的遍历问题。算法思路为:在每个节点的可扩展处都扩散一遍,如无法继续扩展便停下,等到所有的分列都停止之后广度优先搜索便结束。广度优先搜索的扩散一般都是用队列来进行实现。代码实现(…为自定义操作):void BFS(....){ queue<type> q; .............. q.push(n); while(!q.empty()) { q.pop(); ............ if(....)原创 2020-07-25 17:27:15 · 171 阅读 · 0 评论 -
容器—map的基本用法以及实践
**map是一种关联容器,它提供一对一的数据处理能力。map实现从键(key)到值(value)的映射。map效率高的原因是它用平衡二叉搜索树来存储和访问。**头文件为map。例如有一个常见的问题,有n个学生,每个人有姓名和学号,现在给定有个学生的name,要求查他的id。简单的做法可以定义string name[n]和int id[n],或者放在同一个结构体中储存信息,然后在name[]中查找学生,找到后使用下标输出他的id。这样做虽然可行但是需要搜索所有的name[],复杂度为O(n),效率很低原创 2020-07-23 17:14:17 · 471 阅读 · 0 评论 -
容器—set的基本用法以及实践
set就是集合,属于关联式容器,STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。顺序性容器 是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。这个位置和元素本身无关,而和操作的时间和地点有关,顺序性容器不会根据元素的特点排序而是直接保存了元素操作时的逻辑顺序。比如我们一次性对一个顺序性容器追加三个元素,这三个元素在容器中的相对位置和追加时的逻辑次序是一致的。关联式容器 和顺序性容器不一样,关联式容器原创 2020-07-21 20:38:02 · 767 阅读 · 0 评论 -
算法—快速幂运算
快速幂以及扩展的矩阵快速幂应用场景比较常见。幂运算a的n次方,即n个a相乘,快速幂就是高效的算出结果。当n很大时,很多时候都不能处理,一是数字太大,二是计算时间太长。因此对于这种问题便产生了快速幂的运算。具体思路:假设要求a的11次方,先把a的11次方分解为a的八次方,a的二次方,a的零次方的积。再接下来,a1 * a1 = a2,a2 * a2 = a4,a4 * a4 = a8,都是2的倍数,产生的ai都是倍乘关系,逐渐递推就可以了。那么在如何将11分为8+2+1的问题上,使用数字的二进制即可原创 2020-07-31 16:10:05 · 2235 阅读 · 1 评论 -
容器适配器—队列(queue)的用法以及实践
队列大致上和栈相同,不同之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。需要包含queue头文件创建队列的操作:queue<数据类型>变量名如:queue<int> q;队列的有关操作:q.push(n); //将n放进队列q.front(); //返回队头元素q.pop(); //删除队头元素q.back(); //返回队尾元素原创 2020-07-20 16:49:19 · 369 阅读 · 0 评论 -
容器—vector的基本用法以及实践
本篇将以我个人的理解概述STL容器中的顺序式容器vector。vector是一种动态数组,可以从末尾快速插入与删除,并且可以直接访问任何元素,但是在序列中间岁间的插入,删除元素要慢,相对list容器来说vector拥有更快访问随机元素的能力,但是随机插入元素不如list。需要添加头文件vector**vector的创建操作如下:vector< 类型> 变量名(数量,初始值);如:vector<int> a(10); //定义十个int类型变量vector<s原创 2020-07-20 15:31:29 · 496 阅读 · 0 评论 -
字符串算法——KMP匹配及Next数组
KMP是单模匹配算法,即在一段长度为n的文本串中搜索一个长度为m的模式串,算法复杂度为O(n+m),差不多是这类算法能达到的最优复杂度。朴素的模式匹配算法在处理这类问题时,最简单的方法便是暴力匹配,从第一个匹配到的字符开始逐个匹配是否相同,如不相同则回溯到下一位再进行匹配,这种算法在匹配到的位置靠前时也不会显得太慢,但是一旦模式串出现 在文本串的后面甚至最末尾,那算法的复杂度将会退化为O(nm),整体都会拖慢很多。在这种情况下,再来看KMP算法的精妙之处。KMP算法KMP是一个可以在任何情况下都原创 2020-08-13 16:11:58 · 451 阅读 · 0 评论 -
高级数据结构—并查集
并查集是一种非常精巧而且实用的数据结构,主要用于处理一些不相交集合的合并问题。通常的解释可以理解为,在一个城里有n个帮派,例如假设a,b是两个人并且认识,a是A帮派的人,a和b认识则b也会是A帮派的人,c认识b,那么c也会是A帮的人,现在将给出所有的人的认识关系,判断这里有多少帮派以及每个人属于哪个帮派,那么这里的合并查询问题便可以用并查集来解决。并查集:将编号1~n的n个对象划分为不相交集合,在每个集合中,选择其中某个元素代表所在集合,在这个集合中,并查集实现初始化,合并以及查找操作。并查集的简单实原创 2020-07-28 17:07:11 · 588 阅读 · 0 评论 -
容器适配器—栈(stack)的基本用法以及实践
栈是顺序式容器中的一种,有后进先出的特点,每次只能访问栈顶并对其进行操作,就像摞一座塔一样,只能将元素放在最上面,并只能从最顶端操作。需要包含stack头文件创建栈的操作:stack<数据类型> 变量名;如:stack<int> a;栈的有关操作:s.push(n);// 将n放到栈顶s.top(); //访问栈顶s.pop(); //删除栈顶s.size(); //返回栈中元素的个数s.empty(); //检查栈是否为空,如为空则返回ture如有爆栈的情原创 2020-07-20 16:19:35 · 363 阅读 · 0 评论