合集-1-1.基础算法
摘要:往昔少年时 家中长者常劝诫以万般皆下品,唯有读书高 然懵懂之辈实践浅薄,常怀不识之念 胸无点墨又不耐寒窗苦读 见手不释卷,胸有锦绣者,常羡而慕之,乃效仿,却难得其中三昧 于是叹曰,非吾之过,此天赋使然也 遂沉湎与虚无缥缈之梦,蹉跎岁月,虚度年华 今时今日,每念及此,常追悔莫名 人皆恰同学少年,风华正
阅读全文
摘要:一、算法描述 快速排序算法是对冒泡排序算法的一种改进算法,在当前所有内部排序算法中,快速排序算法被认为是最好的排序算法之一。 快速排序的基本思想: 通过一趟排序将待排序的序列分割为左右两个子序列,左边的子序列中所有数据都比右边子序列中的数据小,然后对左右两个子序列继续进行排序,直到整个序列有序。 思
阅读全文
摘要:一、算法描述 在我们求一组元素的第 大值或者前 大值时,可能最先想到的是对元素进行排序,然后选择第 大的或者前 大的值。 不过我们只是想取第 大的数,有必要将整组元素进行排序吗?当然不必,这就是我们将要介绍的快速选择算法,其时间复杂度可以达到 。
阅读全文
摘要:一、算法描述 归并排序,是创建在归并操作上的一种有效的排序算法。 算法是采用分治法的一个非常典型的应用,且各层分治递归可以同时进行。 归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。 思路如下: 取分界点,int mid = (l + r) / 2
阅读全文
摘要:一、题目来源 AcWing算法基础课-788.逆序对的数量 二、题目描述 给定一个长度为 的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 个和第 个元素,如果满足 且 ,则其为一个逆序对
阅读全文
摘要:一、算法简介 二分法,即二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。 例如,如果一个序列是有序的,那么可以通过二分的方法快速找到所需要查找的元素,相比线性搜索要快不少。 此外二分法还能高效的解决一些单调性判定的问题。 二分的关键不在于单调性,或者说二分的本质并不是单调性。
阅读全文
摘要:一、算法简介 浮点数二分相比与整数二分就要简单很多了,但是还是要注意范围的问题。 以下给出一个小例子,求 的平方根, 的范围在 内: #include <iostream> #include <cmath> using namespace std;
阅读全文
摘要:一、算法描述 高精度问题是指两个数字非常大,超过了int,甚至long long的范围,数字的位数甚至能达到 ,那么如果要实现这样两个大数字的运算,需要解决以下两个问题: 如何存储? 这样的两个数字相加是不可能用普通类型来存储的,所以我们第一个要解决的问题就是如何存储高精度数。 首先读
阅读全文
摘要:一、算法描述 要实现两个高精度数的减法,和高精度加法一样都是模拟竖式计算的过程,主要就是解决以下两个问题。 谁大谁小? 由于这两个数字都很大,但是不知道谁更大,所以要先判断哪个数更大,思路如下: 判断这两个数谁的位数更大,位数更大的自然更大。 如果位数不相同,从最高位开始往低位遍历,判断两个数字是否
阅读全文
摘要:一、算法描述 高精度加减法讨论的是两个大整数之间的运算。 而这里高精度乘除法讨论的是一个大整数和一个小整数之间的关系。 算法思路: 还是模拟小学的乘法列竖式,只不过此时不太一样,原本的列竖式是一位一位的乘,这里需要改变一下思路。 这里直接把小整数当成一个数,所乘的数直接当成进位参与运算即可。 每次进
阅读全文
摘要:一、算法描述 高精度除法和乘法讨论的一样,都是一个大整数和一个小整数之间的运算。 算法思路 根据小学除法一样,我们还是模拟这个过程。 注意这里遍历 数组的时候要按照我们读数字的顺序,也就是从数组尾部到头部遍历。 每一位的计算过程应该是,上一轮的余数 乘 之后加上当前位数上的
阅读全文
摘要:一、算法描述 本篇文章我们来介绍一个简单的算法,前缀和。 什么是前缀和? 前缀和是某一个序列的前n项的和,可以理解为数学上的数列的前n项和。 如果 和 分别是原数组和前缀和数组,那么应该有如下关系: s[1] = a[1];、s[2] = a[1] + a[2];、s[3]
阅读全文
摘要:一、算法描述 上一篇文章介绍了一维前缀和,也就是一个数组的前n项和,这篇文章来介绍一下什么是二维前缀和。 含义 一维的是前n项的和,那么二维的情况下,表示的则是与左上角形成的矩形和。 怎么求 一维的递推关系式是s[i] = s[i - 1] + a[i];,我们根据含义来思考二维的递推关系式,读者可
阅读全文
摘要:一、算法描述 上一篇文章介绍了一维差分,本篇文章来介绍一下什么是二维差分。 含义 显然一维差分是一维前缀和的原数组,那么二维差分就是二维前缀和的原数组。 怎么求 跟一维一样,插入一遍即可,但是要注意每次插入要在同一个位置内插入,insert(i, j, i, j, a[i][j]);。 怎么用 一维
阅读全文
摘要:一、算法描述 含义 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。 另外还可以根据序列进行区分,例如在快排中,双指针指向的是同一个序列,而归并排序中两个指针指向的是两个不同的序列。 怎么用
阅读全文
摘要:一、题目来源 AcWing算法基础课-800.数组元素的目标和 二、题目描述 给定两个升序排序的有序数组 和 ,以及一个目标值 。 数组下标从 开始。 请你求出满足 的数对 。 数据保证有唯一解。
阅读全文
摘要:一、算法描述 本篇文章介绍位运算,直接从用法方面来介绍。 求第 K 位 将第 位移到最后面。 &1 即可。 所以操作为:n >> k & 1 求最后一个 1(求 1 的个数) = ~ = ~
阅读全文
摘要:一、算法描述 本篇文章介绍离散化。 什么是离散化? 对于一个数组 来说,他是升序的,其中数字范围很大,例如 ~ 。 但是,数字的个数很少,只有 ~ 。 那么这种情况下就没有必要将数组开得很大从而导致浪费空间,而只需要将每一个数字进行
阅读全文