其他算法
其他算法
Elephant_King
这个作者很懒,什么都没留下…
展开
-
【算法】八大排序
插入排序希尔排序原创 2022-02-24 08:30:11 · 579 阅读 · 0 评论 -
【算法】双指针问题
题目描述当遇到链表,数组,二叉树等问题中使用算法原理主要使用场景就是 1.快慢指针,两个指针,一个步长大,一个步长小。适用问题有核心代码实现例题原创 2022-01-04 22:15:10 · 638 阅读 · 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 · 63 阅读 · 0 评论 -
【算法】完全二叉树的层序遍历
题目描述已知完全二叉树的先序/中序/后序序列,求层序序列算法原理没有什么好说的,因为是完全二叉树,所以可以由根节点直接找到孩子节点 如果根节点root是从0开始,那么左孩子就是root*2+1 右孩子就是root*2+2 如果根节点root是从1开始,那么左孩子就是root*2 ...原创 2021-12-14 19:13:56 · 1391 阅读 · 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 · 88 阅读 · 0 评论 -
【算法】超限问题
算法原理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 · 715 阅读 · 0 评论 -
【算法】堆排序
堆排序原理 构建一个堆,通过堆的性质来进行排序,堆是完全二叉树,所以满足在数组中存储,左孩子节点下标等于父节点下标*2,右孩子节点下标等于父节点下标*2+1如果要从小到大排序,就用大顶堆,如果从大到小排序,就用小顶堆。 堆排序是从最后一个元素向前逐步完成排序的(类比插入排序,是从第一个元素向后完成排序的)堆排序步骤 1.给出一个序列,构建堆 2.根据排序要求,初始化大顶堆或小顶堆 3.构...原创 2021-12-09 11:00:07 · 408 阅读 · 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 · 7211 阅读 · 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 · 183 阅读 · 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 · 126 阅读 · 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 · 281 阅读 · 1 评论 -
【算法】DFS模板
DFS的核心思想是循环嵌套,将一个大问题拆分成一个个相同小问题,然后将小问题(递归的每一轮)进行判断模板void dfs(int step) //步长{ if(/*跳出循环的条件*/){ return; //return十分关键,否则循环将会无法跳出 } /*函数主体 对功能进行实现*/ for(/*对现有条件进行罗列*/){ if(/*判断是否合理*/){ //将条件修改原创 2021-05-09 15:34:26 · 3685 阅读 · 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 · 229 阅读 · 0 评论