数据结构与算法
文章平均质量分 63
Keep--Silent
这个作者很懒,什么都没留下…
展开
-
给逆序对数求原数组
给逆序对数求原数组原创 2022-06-16 22:09:56 · 176 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1057 Stack
PAT (Advanced Level) Practice 1057 Stack树状数组查找中位数原创 2022-06-05 10:11:19 · 163 阅读 · 0 评论 -
根据输入画有向图
直接根据输入画一个mermaid原创 2022-06-02 14:22:04 · 183 阅读 · 0 评论 -
红黑树操作
前言AVL的插入和删除操作,会频繁地调整全树的结构,代价较大。因此,在AVL的平衡标准上放宽条件,引入红黑树。目录性质定义推论插入情况一情况二情况三情况四情况五性质定义①每个结点是红色或者黑色②根结点是黑色。③每个叶子结点都是黑色的空结点(NUUL结点)。④不存在两个相邻的红节点。(即红节点之父和红节点之子必是黑)⑤从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。推论①从根节点到叶节点的最长路径不超过最短路径的两倍②有n个内部结点的红黑树的高度h≤2log2(n原创 2022-04-03 20:50:45 · 521 阅读 · 0 评论 -
数据结构笔记
数据结构自学笔记原创 2022-03-31 21:29:00 · 1709 阅读 · 0 评论 -
动态规划之最优二叉查找树
核心:cnt(i,j)=sum(p[k]cnt(i,j)=sum(p[k]cnt(i,j)=sum(p[k] for k in range(i, j + 1))))if i>ji>ji>j: dp[i][j]=0dp[i][j]=0dp[i][j]=0else: dp[j][j]=max(dp[i][k]+dp[k+2][j]+cnt(i,j)dp[j][j]=max(dp[i][k]+dp[k+2][j]+cnt(i,j)dp[j][j]=max(dp[i][k]+dp[k+2][原创 2021-12-12 11:25:29 · 454 阅读 · 0 评论 -
动态规划之矩阵连乘
核心:if i>=ji>=ji>=j: dp[i][j]=0dp[i][j]=0dp[i][j]=0else: dp[j][j]=max(dp[i][k]+dp[k+1][j]+p[i−1]∗p[k]∗p[j]dp[j][j]=max(dp[i][k]+dp[k+1][j]+p[i-1]*p[k] *p[j]dp[j][j]=max(dp[i][k]+dp[k+1][j]+p[i−1]∗p[k]∗p[j] for k in (i,j) )))class MatrixMultipli原创 2021-12-12 10:29:17 · 734 阅读 · 0 评论 -
深度优先搜索
深度优先搜索:Depth First Search本文讲解以DFS解决校选题深度优先搜索常常复杂度较大,所以需要根据题目的题意进行适当剪枝。目录中档题-2 勋总的幂集 (15 分)中档题-5 LIS (20 分)中档题-6 勋总的求偶日记 (25 分)压轴题-1 贝贝的数组划分 (30 分)压轴题-2 别装13 (30 分)中档题-2 勋总的幂集 (15 分)链接dfs:15分中档题-5 LIS (20 分)链接dfs:2分dfs剪枝后:8分中档题-6 勋总的求偶日记 (2原创 2021-11-20 12:45:45 · 751 阅读 · 0 评论 -
STL学习笔记(九)set
集合(Set)是一种包含已排序对象的关联容器目录基本函数beginclearcountemptyenderasefindinsert例题基本函数begin语法:iterator begin();返回指向当前集合中第一个元素的迭代器。clear语法:void clear();清除当前集合中的所有元素。count语法:size_type count( const key_type &key );返回当前集合中出现的某个值的元素的数目。empty语法:bool em原创 2021-11-14 09:10:45 · 136 阅读 · 0 评论 -
讲解STL
目录queuestackstringpriority_queuevectorsetmapmap-string,intmap-vec,intvector-vectoriteratorqueue队列int x,y,n;queue<int>q;q.push(12); q.push(13); n=q.size();//n=2;x=q.front();q.pop();y=q.front();stack栈stack<int> s;q.push(12); q.pus原创 2021-11-12 10:31:10 · 1601 阅读 · 0 评论 -
STL学习笔记(八)优先队列priority_queue
优先队列:priority_queue,在头文件#include里。优先队列的函数调用和普通队列一样。C++优先队列类似队列,但是在这个数据结构中的元素按照一定的断言排列有序。声明方式:priority_queue< type, container, function >priority_queue< type >//使用默认type的默认的比较函数排序使用优先队列的时候要定义优先队列的比较函数,或者使用默认的比较函数。函数:bool empty() const//返原创 2021-11-08 10:28:15 · 298 阅读 · 0 评论 -
STL学习笔记(七)vector向量数组,创建与遍历图
vector向量数组,创建与遍历图题目背景说明代码及注释题目背景题目:鬼谷八荒tly最近沉迷鬼谷八荒无心学习,一上课就刷材料刷经验,玩了好几天以后看着自己密密麻麻的好友关系,他想知道每个人与自己的好感度,友好的tly认为朋友的朋友也是朋友,yly和一个人的关系越近好感度越高,比如a是b的好友,c是b的好友,那么a对b的好感度大于对c。为了方便我们用数字代替每个人的名字,tly是1。输入格式:第一行输入n,m,有n个人和m条关系。题目保证关系不成环下面m行每行输入两个数字,表示这两个人是好朋友原创 2021-10-31 22:03:12 · 275 阅读 · 0 评论 -
STL学习笔记(六)vector与map的合用、vector与vector的合用
题目:21天梯国赛L2-37 335 28 74-1 -1 2228 74 35-1 -1 2211 66 035 28 7435 28 7443 35 28 742 -1 -1 221 11 66 01 28 74 35解决思路:记录:合用map与vector:map<vector<int>,int>q;第一关键字是向量vector,把每行的数列存入第二关键字是数量,记录每个数列的数量处理:用一个向量来存向量vector<v原创 2021-10-24 20:53:07 · 1179 阅读 · 0 评论 -
STL学习笔记(五)vector向量数组,创建与遍历树
vector向量数组,创建与遍历树题目背景说明代码及注释题目背景题目:列出叶结点对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。输入格式:首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 “-”。编号间以 1 个空格分隔。输出格式:在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。输入样例:81 --原创 2021-10-17 22:40:13 · 320 阅读 · 0 评论 -
STL学习笔记(二)map
C++ Maps是一种关联式容器,包含“关键字/值”对map<容器1,容器2>,这里的容器可以是变量。如下校选题:题目大意:有n条聊天记录,找出发言最多的人(如果发言最多的不只一个人,找出发言最多的人中最早发言的那个)。如果不会map,思路:开一个很大的数组作为散列表写一个合理的哈希函数将字符串map思路:两个map容器: map<string,int>say; map<string,int>time;say[first]=second原创 2021-09-26 17:35:51 · 77 阅读 · 0 评论 -
STL学习笔记(一)string
STL学习笔记(一)string常用函数c_str()增:insert()删:erase()改:replace()查:find()c_str()const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本字符串相同string s="123"printf("%s",s.c_str())增:insert() iterator insert( iterator i, const char &ch ); basic_string &原创 2021-09-19 18:10:40 · 138 阅读 · 0 评论 -
1101 Quick Sort (25 分) st表
题目链接1101 Quick Sort (25 分)There is a classical process named partition in the famous quick sort algorithm. In this process we typically choose one element as the pivot. Then the elements less than the pivot are moved to its left and those larger than the原创 2021-09-09 10:04:21 · 94 阅读 · 0 评论 -
最长公共序列和
(为了水博客而写)找出公式:实现#include<iostream>#include<algorithm>using namespace std;typedef long long ll;#define SIZE (100+10)int dp[30][30];int main() { string s; string s1=" caebdaaf"; string s2=" aa"; int j,i; for(i=1; i<s1.size(); i++原创 2021-07-13 16:29:01 · 95 阅读 · 0 评论 -
最长非递减子序列
给定一个数组num[],求最长非递减子序列。解决:用一个数组ans来存这个子序列关键:怎么更新这个数组?扫一遍num[]假设当前扫到num[i],更新操作:①如果num[i]大于等于ans最后一个数(或者ans为空),那么ans在末尾插入num[i]②否则的话,在ans[]中,找到第一个大于num[i]的数,将其更新为num[i]。如数组num[]={4,2,6,3,5,2,2,2};i = 0, ans[]={4};i = 1, ans[]={2};i = 2, ans[]={原创 2021-07-13 15:42:08 · 505 阅读 · 0 评论 -
安全性算法
题目背景作答思路解释关键结构与函数struct Reourcestruct Situationvoid show(void ini(void request(int respond(void update(int NoEnd(main()关键运行结果① 初始化后②P1 Request-> 1 2 2③P0 Request-> 2 4 3④运行到最后总结①②附录:代码题目背景作答思路解释①每次随机选取一个进程,生成一个request②对这个request,进行判断,看.原创 2021-05-24 19:33:58 · 6153 阅读 · 0 评论 -
队列
queue,一种先进先出的存储结构。类似于我们日常的排队,先排队的人先办理相关事务。First In ,First Out,简称FIFO。队列可以用数组实现也可以用链表实现。如果用链表实现的话,需要保存两个结点:表头,用于出队;表尾,用于入队。如果是用数组实现,需要两个变量记录头和尾,当这两个变量相遇时,队列为空。为了最大地利用空间,当这两个变量达到数组最大下表的时候,会走到0,这样形成了一个环,最大程度上利用了空间。然而,自己实现的队列,哪里有直接调用库函数里的函数来的轻松简单。在头文件#incl原创 2020-05-18 11:30:43 · 148 阅读 · 0 评论 -
vector向量数组,创建与遍历树
vector向量数组,创建与遍历树题目背景说明代码及注释题目背景题目:列出叶结点对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。输入格式:首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 “-”。编号间以 1 个空格分隔。输出格式:在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。输入样例:81 --原创 2021-03-25 20:32:12 · 691 阅读 · 1 评论