算法:基础算法
文章平均质量分 89
基础算法
wmy0217_
2023天天开心(♡˙︶˙♡)
展开
-
区间合并
区间合并,就是把有交集的两个集合进行合并,合并成更大的区间,即取两个区间的并集。步骤:1、对每个区间进行排序2、假设我们从前往后扫描到了第 i 个区间,那么第 i 个区间和当前维护的区间的关系有三种:① 第 i 个区间在当前维护的区间的内部② 第 i 个区间和当前维护的区间有交集,但不完全在维护的区间的内部③ 第 i 个区间和当前维护的区间没有交集补充: sort对pair排序时,...原创 2020-04-04 19:30:08 · 1822 阅读 · 2 评论 -
离散化
文章目录离散化概念、用途离散化的步骤部分代码例题离散化概念、用途用处: 有些数据本身很大, 自身无法作为数组的下标保存对应的属性,我们可以对这些数进行离散化处理。假如,有一组数{1、2、100、2000、10000、109},这组数有个特点,就是值域最大可以取到109甚至更大,但是这组数的个数很少,最多只有105左右。而有一些题,需要我们把这些数当作下标来做题,对于这么大的数,我们总不可能开...原创 2020-04-03 21:54:46 · 337 阅读 · 0 评论 -
高精度乘高精度
C=A * B (A、B均是高精度数)比如A=156,B=3,求A * B很容易知道答案是468,怎样算的呢?① 首先让3 * 6 = 18,然后向进一位,并且这位只保留8② 让3 * 5 + 进位1 = 16,然后向前进一位,并且这位只保留6③ 让3 * 1 + 进位1 = 4,此时不向前进位,保留4所以最终答案是468通过这个例子我们再来分析发现,C0 = A0 * B0,C...原创 2020-04-01 22:25:27 · 1893 阅读 · 1 评论 -
快速排序
快速排序是由冒泡排序改进而得的。在冒泡排序中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序。而快速排序可以通过两个不相邻记录的一次交换,来消除多个逆序。基本思想:任取一个元素为中心所有比它小的元素一律前放,比它大的元素一律后方,形成左右两个子表对各子表重新选择中心元素并依此规则继续形成左右两个子表(递归的思想)直到每个子表元素只剩一个基本思想: 通过一...原创 2020-02-04 09:30:47 · 576 阅读 · 0 评论 -
归并排序
归并排序算法的思想:假设初始序列含 n 个记录,则可看成是 n 个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列,再两两归并,…,如此重复,直到得到一个长度为 n 的有序序列为止。归并排序过程:合并两个有序数组的过程:【算法分析】①时间复杂度当有 n 个记录时,需进行log2^n趟归并排序,每一趟归并,其关键字比较次数不超过 n ,元素移...原创 2020-02-08 20:35:57 · 1133 阅读 · 0 评论 -
二分法(整数二分、浮点数二分)
文章目录整数二分浮点数二分具有单调性的一定可以使用二分法解决整数二分整数二分有两个模板,一个是区间[l,r]被划分成[l,mid]和[mid+1,r]时使用的,还有一个是区间[l,r]被划分为[l,mid-1]和[mid,r]时使用。模板如下://区间[l,r]被划分成[l,mid]和[mid+1,r]时使用:int bsearch_1(int l,int r){ while(l ...原创 2020-02-09 20:57:03 · 2656 阅读 · 0 评论 -
双指针算法
给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。数据范围1≤n≤100000输入样例:51 2 2 3 5输出样例:3传统的算法用两个for循环时间复杂度为O(n^2),而下面...原创 2020-02-27 16:17:06 · 202 阅读 · 0 评论 -
位运算常用操作
文章目录1、位运算概述2、位运算运算符3、(&)与运算操作4、常用操作1、位运算概述1001 1011最右边是最低位,最左边是最高位计算机中所有的数据都是以二进制来存储的,即0、1两种状态int a = 17;int b = 18;int c = a + b;计算机先在机器内部将数字转换为二进制再计算17:1 0 0 0 118:1 0 0 1 035:1...原创 2020-02-29 21:43:53 · 385 阅读 · 0 评论 -
一维差分、二维差分算法
797. 差分输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。输出格式共一行,包含n个整数,表示最终序列。数据范围1≤n,m≤100000,1...原创 2020-02-22 23:43:49 · 1528 阅读 · 3 评论 -
求前缀和、求子矩阵的和详解
795. 前缀和输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤...原创 2020-02-19 23:48:59 · 998 阅读 · 0 评论 -
高精度(加、减、乘、除)算法详解
文章目录高精度加法高精度减法高精度乘法高精度除法高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。通常我们用数组存储高精度数的每一位。下面的几种运算我们都是把位数较高的放在A[N],位数较低的放在...原创 2020-02-11 21:04:22 · 13230 阅读 · 6 评论