算法
算法基础
冒泡P
快乐的铁头侠
# Unity开发
# UE开发
# 算法学习
# 蓝桥杯
展开
-
数据结构与算法 -- 树
【代码】数据结构与算法 -- 树。原创 2024-05-12 16:29:08 · 209 阅读 · 0 评论 -
快速排序and归并排序
1.快速排序快速排序的思想分治确定轴值(分界点),可以是q[l]、q[l+r>>1](建议用这个)、q[r]根据轴值划分递归左右子划分快排结束即已经是合并完的情况,所以已经完成子问题合并代码分析//快速排序函数void quick_sort(int a[], int l, int r)//待排序列,左端点,右端点{ //序列中只有一个数或者没有数结束 ...原创 2023-01-19 13:02:00 · 16 阅读 · 0 评论 -
算法 -- 二分
1.整数二分用一个性质将区间分为满足性质和不满足性质,答案是二分的边界情况一代码分析int bsearch_1(int l,int r){ while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; //如果mid满足性质缩小区间为[l,mid] ...原创 2023-01-19 20:21:00 · 13 阅读 · 0 评论 -
算法 -- 高精度
当计算位数超过最大存储范围时,无法正常存储而使用数组来存储数据读取string a, b;cin >> a >> b; //用字符串读取vector<int>A, B; //转换为存储在数组中for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0'); //从低位开始存储,便...原创 2023-01-20 18:57:00 · 12 阅读 · 0 评论 -
scanf 与 printf
sacnf与printf在头文件cstdio中,sacnf与printf在数据规模较大时效率高于cin与cout需要注意的是scanf变量需要取地址1.格式化输出-保留小数位printf输出小数时默认保留6位小数位,但有时题目输出要求固定的小数位,printf会进行四舍五入double a=6.6666666;printf("%.0lf",a);//保留0位小数printf("%.2...原创 2023-01-20 19:02:00 · 12 阅读 · 0 评论 -
前缀和and差分
1.前缀和求前缀和的时间复杂度与数据的规模有关,但是用前缀和去求某一区间的和时间复杂度为O(1)一维:一般让下标从1开始,可以避免特判一维前缀和 s[i]=a[1]+a[2]+……+a[i]求数组[l,r]之间的和 =s[r]-s[l-1]二维:二维前缀和s[i][j]=a[i][j]+s[i][j-1]+s[i-1][j]-s[i-1][j-1]求[x1,...原创 2023-01-20 21:59:00 · 13 阅读 · 0 评论 -
算法 -- 位运算
1.求二进制中第k位数这里的第k位指的是从低位开始n>>k&12.返回二进制的最后一位1代码:int lowbit(int x) //返回x的最后一位1{ return x & -x;}原理:补码 = 反码 + 1计算机存储中x的补码为相反数-x注意// 位运算中负数右移在前头补1,与正数右移在前头补0不一样...原创 2023-01-23 20:12:00 · 14 阅读 · 0 评论 -
算法 -- 离散化
概念将一个较大的区间映射到一个小的区间中,因为这个较大的区间是离散的,如果开辟一个大小跟这个区间一致的数组会造成浪费,遍历的话会超时,所以我们需要映射映射:vector<int> alls;//存储所有带离散化的值sort(alls.begin(), alls.end()); //排序alls.erase(unique(alls.begin(), alls.end()), ...原创 2023-01-23 21:44:00 · 10 阅读 · 0 评论 -
输入的方法
当输入个数未知使用while连续输入!!!1.逗号表达式逗号表达式只会判断最后一个语句的真值例:读入一个N,当N 为 0 或负数则继续读取数字直至读入 N 值为正整数为止int n;while(cin>>n,n<=0);2.cin返回值为true当有输入值时cin的返回值是true,直到无输入cin返回false例:输入多组样例,每组样例包含俩个整整数A和B此...原创 2023-02-02 19:45:00 · 15 阅读 · 0 评论 -
双指针的应用
同向双指针能够实现跳跃寻找,适用于寻找含有某一特性区间,比如最长相同区间,最长不重复区间不重复区间可以用一个数组t[N]来表示,如果其中元素大于1,说明有重复int res=0,j=0;for(int i=0;i<n;i++){ t[a[i]]++;//记录个数 while(j<i&&t[a[i]]>1) t[a[j++]]--;//...原创 2023-03-05 18:00:00 · 11 阅读 · 0 评论 -
递归与递推
递归所有递归都可以画递归搜索树来理解例如斐波那契数列:实现指数型枚举例:从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。递归法:#include<iostream>#include<cstdio>using namespace std;const int N=18;int st[N],n; //1选 0不选void df...原创 2023-04-15 14:08:00 · 13 阅读 · 0 评论 -
map和multimap
map相对于set区别,map具有键值和实值,所有元素根据键值自动排序,pair的第一个值被称为键值key,pair的第二个值被称为实值value。map也是以红黑树为底层实现机制,根据key进行排序构造函数#include<map>map<int,string> m;multimap<T1,T2> mlmap;插入方法一map的key重复将...原创 2023-05-08 19:02:00 · 14 阅读 · 0 评论 -
算法 -- 数学
x的y次方使用函数pow(x,y)例如 2的10次方 pow(2,10)pow函数也可以用来开根号,例如开2次方根其实就是二分之一次方例如 16开4次方根 pow(16,1.0/4)输出注意输出是要求保留n位有效数字还是保留n位有效小数位cout 输出浮点数默认保留6位有效数字printf 可以自定义保留的小数位一个方法:四舍五入精确到整数printf("%.0lf",n)...原创 2023-07-10 20:40:00 · 19 阅读 · 0 评论 -
AcWing 1230. K倍区间
res是根据当前cnt数组存的个数计数的,那么我们想想第i个数模是0,那么它除了和前i个数组成n个k倍区间,是不是自己也单独是一个k倍区间,所以所有模为0的数的真正的区间个数都是n+1,所以直接给cnt[0]初始化为1,那么所有模为0的数在累加res时都会自动+1。那为什么要用这种动态数组,因为我们的本意是在1~i-1中找到和i模数相同数的个数,正常情况要找这个个数我们一般会想到用俩重循环,但是这是非常浪费的,所以我们开一个数组cnt来存个数,一边走一边加,这样就可以一直。k-1的个数情况,即。原创 2023-09-06 01:02:53 · 44 阅读 · 0 评论 -
sstream
<sstream> 定义了三个类:istringstream、ostringstream 和stringstream,分别用来进行流的输入、输出和输入输出操作。定义:stringstream 变量名>>,<<像箭头就是流的流向,可以将流流入或流出,这里巧妙的运用了流的流出,将流流出到变量中就类似于控制台输入变量,都会以空格为结尾。stringstream...原创 2023-09-12 21:04:00 · 17 阅读 · 0 评论