![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 56
算法
Elephant_King
github:https://github.com/Elephant-King9
平时写的代码会上传到github,欢迎学习交流
展开
-
【算法】时间复杂度图像
总nn²n³lognnlogn原创 2021-12-22 20:52:07 · 942 阅读 · 0 评论 -
【算法】C语言使用qsort对字符串字符进行排序(解决字符串长度不统一的问题)
【代码】【算法】C语言使用qsort对字符串字符进行排序(解决字符串长度不统一的问题)原创 2024-02-18 13:30:19 · 474 阅读 · 1 评论 -
【算法】背包问题
也就是说{1,2}和{2,1}算同一种情况。也就是说{1,2}和{2,1}算两种情况。先遍历物品在遍历背包得到的是组合数。先遍历背包在遍历物品得到的是排列数。原创 2024-02-13 13:07:23 · 432 阅读 · 0 评论 -
【算法】【蓝桥杯】蓝桥杯常用函数头文件以及C++11代替
memset函数在#include<string.h>sort函数在#include<algorithm>因为蓝桥杯没有c++11语法,无法使用auto函数,创建迭代器需要迭代器定义::iterator如map<int,int>::iterater it= ma.begin()abs,sqrt函数在#include<math.h>...原创 2022-03-14 11:29:42 · 3399 阅读 · 2 评论 -
【算法】双指针问题
题目描述当遇到链表,数组,二叉树等问题中使用算法原理主要使用场景就是 1.快慢指针,两个指针,一个步长大,一个步长小。适用问题有核心代码实现例题原创 2022-01-04 22:15:10 · 641 阅读 · 0 评论 -
【算法】KMP算法模板
#include<bits/stdc++.h>using namespace std;void KMP(string a,int n,int Next[]){ //a是待求子串,n是待求子串的长度,Next数组 int len=0; int j=1; Next[0]=0; while(j<n){ if(a[j]==a[len]){ /*当两者相等时,说明j的位置和前面对应前缀的位置相等, .原创 2021-05-06 09:02:00 · 350 阅读 · 1 评论 -
【算法】DFS模板
DFS的核心思想是循环嵌套,将一个大问题拆分成一个个相同小问题,然后将小问题(递归的每一轮)进行判断模板void dfs(int step) //步长{ if(/*跳出循环的条件*/){ return; //return十分关键,否则循环将会无法跳出 } /*函数主体 对功能进行实现*/ for(/*对现有条件进行罗列*/){ if(/*判断是否合理*/){ //将条件修改原创 2021-05-09 15:34:26 · 3792 阅读 · 0 评论 -
【算法】Dijkstra算法模板
给出一张包含n个节点、m条边的无向图(无重边,无自环),请你求出图上两点s,t间的最短路径长度。模板#include<iostream>#include<algorithm>#define MMAX 5000005using namespace std;int g[505][505]; //二维矩阵用于存放边的权值int dis[505]; //存放从起点s到任意一个节点的最短路径int visited[505原创 2021-06-17 15:57:47 · 262 阅读 · 0 评论 -
【算法】【动态规划】从1到n整数中1出现的次数:O(logn)算法
参考问题:PTA | 程序设计类实验辅助教学平台(1049 Counting Ones (30 分))有个专门的算法,参考文章:从1到n整数中1出现的次数:O(logn)算法_love music.的博客-CSDN博客注意:当now到达对应为值的时候只用管这个位有几个一就好了,不用管上一位有几个!例如:当now为百位的时候,只需要关注从100~199有多少个1,不用管十位和个位的情况(如211算不算百位上的1呀),因为这些所有情况都在十位和个位包含了过程模拟:设now左边的几位的原创 2021-10-27 10:14:16 · 248 阅读 · 0 评论 -
【算法】约瑟夫环原理及其公式
问题描述:将n个人围成一个圈,从1开始依次数数,数到k或者k的倍数时,这个人出局,如此循环直到环中只剩一个人的时候这个人获胜可以把这个圈想想成一条直线,假设一开始有11人,k=3将这11个人从1到11进行编号从1开始报数,此时的人数是11第一个被淘汰出局的是3注意,这里淘汰到三继续往后数的话,就相当于4是第一个人,再从1开始计数,此时的人数为10数次循环往复,相当于每减少一个人,数组整体向后移动k位(此处k=3,所以是移动三位),整体移动,说明最后获胜的人也是向后移动..原创 2021-11-16 16:25:05 · 7449 阅读 · 0 评论 -
【算法】并查集
参考文章:算法学习笔记(1) : 并查集 - 知乎并查集的概念与实现_柳婼 の blog-CSDN博客核心函数:1.查询父节点(findFather) 2.合并两个节点(Union)首先需要一个father数组,代表每一个节点的父节点是谁,然后对父节点进行初始化,使father[i]=i,代表一开始每个节点的父节点都是自己for(int i = 0; i < n; i++) father[i] ...原创 2021-11-01 09:50:46 · 197 阅读 · 0 评论 -
【算法】关于分数的问题
网上查阅了一套流程,不出意外的话可以囊括所有的输出格式首先就是输入,要用scanf输入,因为要除去/然后就是输出输出带分数if(sa*sb<0){ sa=abs(sa); sb=abs(sb) cout<<"-";}if(sb==0){ cout<<"Inf" return 0;}if(sa==0){ cout<<"0"; return 0;}if(sb==1){ cout<<sa;原创 2021-10-28 10:19:58 · 136 阅读 · 0 评论 -
【算法】【动态规划】01背包问题
参考视频【动态规划】背包问题_哔哩哔哩_bilibili首先画出一个表首先第一行肯定全部都是0,因为没有物品编号为0的物品同理第一列是全部是0,因为当背包容量为0的时候,什么东西都放不下随后随便哪一个格子举例,比如图中的这个格子,当背包容量为6,有123三个物品可选时,需要比较只有1和2号物品的时候背包容量为6的时候的价值和把三号物品放进去以后的价值(三号物品的价值加上背包容量减去3好物品的重量)for(int i = 1; i <= n; i++) { ...原创 2021-10-25 15:47:24 · 181 阅读 · 0 评论 -
【算法】【动态规划】最长上升子序列和最长不下降子序列
也是个动态规划的经典问题了参考视频:9.67 最长不下降子序列——信息学竞赛培训课程_哔哩哔哩_bilibili给出一个无序的数组例如:5 8 8 6 2 6 7则最长上升子序列为5 6 7最长不下降子序列为5 6 6 7核心思想:遍历数组,以被遍历的数为结尾计算最长序列最长上升子序列逐步遍历:1.先设置一个dp数组,初值全部设为1设置两个变量i,j,...原创 2021-10-25 10:46:59 · 271 阅读 · 0 评论 -
【算法】【动态规划】上升下降不上升不下降子序列再理解
初步理解:最长上升子序列和最长不下降子序列(动态规划)_Elephant_King的博客-CSDN博客本文本次探讨,最长上升子序列,最长不下降子序列,最长下降子序列,最长不上升子序列与这个序列倒序后的最长上升子序列,最长不下降子序列,最长下降子序列,最长不上升子序列与反向遍历的最长上升子序列,最长不下降子序列,最长下降子序列,最长不上升子序列共12个序列之间的关系测试数据1413 7 9 16 38 24 37 18 44 19 21 22 63 15将12个dp数组列出原创 2021-11-25 19:38:11 · 193 阅读 · 0 评论 -
【算法】【动态规划】字符串编辑距离问题
题目大意: 就是给出两个字符串,只能进行增删改操作,问从字符串1转化为字符串2最少需要几步状态转移方程dp[i][j] i和j分别表示两个字符串的长度当s1[i]==s2[j]的时候,说明不用操作,相当于当s1长度为i的时候和s2长度为j的时候不需要进行操作,所以次数和s1长度为i-1和s2长度为j-1的时候相等 所以dp[i][j]=dp[i-1][j-1] 当s1[i]!=s2[j]的时候,说明需...原创 2021-11-30 19:33:51 · 356 阅读 · 0 评论 -
【算法】【动态规划】序列问题
主要包括以下五个方面最长上升子序列,最长不下降子序列,最长下降子序列,最长不上升子序列,最长公共子序列一、最长序列问题其中关于前四种序列可以参考往期自己写的文章,四种序列可以都理解为dp数组在判断条件的时候条件不同,但是思想是相同的根本思想就是:从第一个结果进行遍历,根据当前遍历到的值和之前遍历到的值进行比较,然后得到相对较大的那个状态转移方程最长上升子序列和最长不下降子序列(动态规划)_Elephant_King的博客-CSDN博客对于...原创 2021-11-29 14:45:02 · 511 阅读 · 0 评论 -
【算法】【动态规划】最长公共子序列问题(LCS)
给出两个序列,求两个序列最长的公共部分参考文章动态规划 最长公共子序列 过程图解_hrn1216的博客-CSDN博客_最长公共子序列加入给出两个子序列s1 1 3 4 5 6 7 7 8 s2 3 5 7 4 8 6 7 8 2 两者最长的序列应该是3 5 7 7 8核心思想:当s1的最后一个值和s2的最后一个值相等的时候,其最长序列应该是除去这两个值...原创 2021-11-22 20:52:48 · 311 阅读 · 0 评论 -
【算法】堆排序
堆排序原理 构建一个堆,通过堆的性质来进行排序,堆是完全二叉树,所以满足在数组中存储,左孩子节点下标等于父节点下标*2,右孩子节点下标等于父节点下标*2+1如果要从小到大排序,就用大顶堆,如果从大到小排序,就用小顶堆。 堆排序是从最后一个元素向前逐步完成排序的(类比插入排序,是从第一个元素向后完成排序的)堆排序步骤 1.给出一个序列,构建堆 2.根据排序要求,初始化大顶堆或小顶堆 3.构...原创 2021-12-09 11:00:07 · 413 阅读 · 0 评论 -
【算法】BFS
题目描述也没啥描述的算法思想也算是暴力递归,但是有时候dfs会超时的bfs不会超时核心代码实现int bfs(int x){ int cnt=0; queue<Node> q; //建立队列 q.push(Node{0,x}); //放入首个元素 while(!q.empty()){ //递归,直到队列里没有元素后跳出 Node temp; temp=q.front(); //获得队首元素 q..原创 2021-12-17 20:44:54 · 68 阅读 · 0 评论 -
【算法】快速幂
题目描述计算x的n次幂,不能用pow函数算法原理因为要计算x的n次幂,直接通过for循环计算时间复杂度较高,可以通过快速幂来计算假如x=2,n=10,10的二进制表示方法为1010n 0 1 0 1 1 2 4 8 16 32 x 2 2*2=4 4*4=16 16*16=256 256*256=65536 65536*65536=4,294,9...原创 2021-12-13 20:07:06 · 99 阅读 · 0 评论 -
【算法】【树】先序先序、后序序列是否为BST树的先序序列、后序序列(详细解释)
题目描述给出一个先序/后序序列,判断这个序列是不是某个BST树的先序/后序序列算法原理核心的思路就是知道当前子树的一个端点(因为是先序/后序序列,所以一个端点肯定是根节点root)和当前子树在序列中的另一个端点(可以记做tail),然后再当前树判断是不是BST树,然后再递归进入当前树的左右子树,再判断左右子树是不是BST树,如果这个序列对应的所有子树都为BST树,说明这个树也为BST树举例用树 root t...原创 2021-12-16 12:33:27 · 977 阅读 · 0 评论 -
【算法】【树】已知后序中序序列求先序序列
题目描述如题所示,已知后序中序序列求先序序列算法原理利用递归和分制的思想,找到当前树后序序列的根节点,然后找到对应中序序列的位置,然后根据根节点在中序序列中的位置来判断左右子树分别的位置,然后继续对左右子树进行递归,最后得出结果具体的递归判断与由先序序列和中序序列求法类似,可以参考往期文章核心代码实现参考柳婼已知后序与中序输出前序(先序)_柳婼 の blog-CSDN博客_知道中序和后序求前序#include <cstdio>us...原创 2021-12-14 21:06:16 · 705 阅读 · 0 评论 -
【算法】完全二叉树的层序遍历
题目描述已知完全二叉树的先序/中序/后序序列,求层序序列算法原理没有什么好说的,因为是完全二叉树,所以可以由根节点直接找到孩子节点 如果根节点root是从0开始,那么左孩子就是root*2+1 右孩子就是root*2+2 如果根节点root是从1开始,那么左孩子就是root*2 ...原创 2021-12-14 19:13:56 · 1415 阅读 · 0 评论 -
【算法】【树】已知先序中序序列求后序序列(详细解释)
题目描述算法原理核心代码实现例题原创 2021-12-14 18:02:01 · 3269 阅读 · 1 评论 -
【算法】超限问题
算法原理INT_MAX 代表int的最大值2147483647INT_MIN 代表int的最小值-2147483648所以在将字符串转化为数字,倒置数字等操作时,可以在temp=temp*10+x%10;这一步操作之前先进行判断if(temp>INT_MAX/10) return 0; //当加之前temp>214748364时,因为下一步temp要*10,所以肯定会超限,直接返回0if(temp==INT_MAX/...原创 2021-12-11 10:39:51 · 728 阅读 · 0 评论