随笔分类 -  算法基础

算法基础中的知识点
摘要:<sstream> 定义了三个类:istringstream、ostringstream 和stringstream,分别用来进行流的输入、输出和输入输出操作。 定义:stringstream 变量名 >>,<<像箭头就是流的流向,可以将流流入或流出,这里巧妙的运用了流的流出,将流流出到变量中就类似 阅读全文
posted @ 2023-09-12 21:04 咕噜噜冒泡 阅读(25) 评论(0) 推荐(0)
摘要:## x的y次方 使用函数`pow(x,y)` 例如 2的10次方 `pow(2,10)` pow函数也可以**用来开根号**,例如开2次方根其实就是二分之一次方 例如 16开4次方根 `pow(16,1.0/4)` ## 输出 注意输出是要求`保留n位有效数字`还是`保留n位有效小数位` cout 阅读全文
posted @ 2023-07-10 20:40 咕噜噜冒泡 阅读(37) 评论(0) 推荐(0)
摘要:递归 所有递归都可以画递归搜索树来理解 例如斐波那契数列: 实现指数型枚举 例:从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。 递归法: #include<iostream> #include<cstdio> using namespace std; const int N= 阅读全文
posted @ 2023-04-15 14:08 咕噜噜冒泡 阅读(24) 评论(0) 推荐(0)
摘要:同向双指针 能够实现跳跃寻找,适用于寻找含有某一特性区间,比如最长相同区间,最长不重复区间 不重复区间可以用一个数组t[N]来表示,如果其中元素大于1,说明有重复 int res=0,j=0; for(int i=0;i<n;i++) { t[a[i]]++;//记录个数 while(j<i&&t[ 阅读全文
posted @ 2023-03-05 18:00 咕噜噜冒泡 阅读(77) 评论(0) 推荐(0)
摘要:当输入个数未知使用while连续输入!!! 1.逗号表达式 逗号表达式只会判断最后一个语句的真值 例:读入一个N,当N 为 0 或负数则继续读取数字直至读入 N 值为正整数为止 int n; while(cin>>n,n<=0); 2.cin返回值为true 当有输入值时cin的返回值是true,直 阅读全文
posted @ 2023-02-02 19:45 咕噜噜冒泡 阅读(61) 评论(0) 推荐(0)
摘要:概念 将一个较大的区间映射到一个小的区间中,因为这个较大的区间是离散的,如果开辟一个大小跟这个区间一致的数组会造成浪费,遍历的话会超时,所以我们需要映射 映射: vector<int> alls;//存储所有带离散化的值 sort(alls.begin(), alls.end()); //排序 al 阅读全文
posted @ 2023-01-23 21:43 咕噜噜冒泡 阅读(22) 评论(0) 推荐(0)
摘要:1.求二进制中第k位数 这里的第k位指的是从低位开始 n>>k&1 2.返回二进制的最后一位1 代码: int lowbit(int x) //返回x的最后一位1 { return x & -x; } 原理: 补码 = 反码 + 1 计算机存储中x的补码为相反数-x 注意 // 位运算中负数右移在前 阅读全文
posted @ 2023-01-23 20:11 咕噜噜冒泡 阅读(24) 评论(0) 推荐(0)
摘要: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] 阅读全文
posted @ 2023-01-20 21:59 咕噜噜冒泡 阅读(28) 评论(0) 推荐(0)
摘要:sacnf与printf在头文件cstdio中,sacnf与printf在数据规模较大时效率高于cin与cout 需要注意的是scanf变量需要取地址 1.格式化输出-保留小数位 printf输出小数时默认保留6位小数位,但有时题目输出要求固定的小数位,printf会进行四舍五入 double a= 阅读全文
posted @ 2023-01-20 19:01 咕噜噜冒泡 阅读(48) 评论(0) 推荐(0)
摘要:当计算位数超过最大存储范围时,无法正常存储而使用数组来存储数据 读取 string a, b; cin >> a >> b; //用字符串读取 vector<int>A, B; //转换为存储在数组中 for (int i = a.size() - 1; i >= 0; i--) A.push_ba 阅读全文
posted @ 2023-01-20 18:57 咕噜噜冒泡 阅读(43) 评论(0) 推荐(0)
摘要:1.整数二分 用一个性质将区间分为满足性质和不满足性质,答案是二分的边界 情况一 代码分析 int bsearch_1(int l,int r) { while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; //如果mid满足性质缩 阅读全文
posted @ 2023-01-19 20:21 咕噜噜冒泡 阅读(92) 评论(0) 推荐(0)
摘要:1.快速排序 快速排序的思想分治 确定轴值(分界点),可以是q[l]、q[l+r>>1](建议用这个)、q[r] 根据轴值划分 递归左右子划分 快排结束即已经是合并完的情况,所以已经完成子问题合并 代码分析 //快速排序函数 void quick_sort(int a[], int l, int r 阅读全文
posted @ 2023-01-19 13:02 咕噜噜冒泡 阅读(37) 评论(0) 推荐(0)