[编程笔记]-Two_Pointers双指针 前言最近时间紧迫,从这篇文章开始,就着重记笔记了,不再提供详细教程。 简介双指针算法,名义上说就是使用两个指针循环(一个或多个)数组,但实际上通常用不到指针。 一般情况下,双指针算法用于特定情境,将O(n2)的时间复杂度简化成O(n)。 模板一般情况下,形如下方所示的代码,在满足特定需求的情况下,都可以转化成双指针来做。 1234567for(int i=0;i<n;i++){ f 2024-07-31 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #双指针
[编程笔记]-Adjacent_Difference差分 前言差分是前缀和的逆运算,因此思想与之差不多。所以,为了更好地理解,如果有需要,请事先阅读“[编程笔记]-Partial_Sum前缀和”。 一维差分思想及实现同理,一维差分也可视为对差分的引入。 差分作为前缀和的逆运算,定义也与之相反。具体地说,对于数组a[],**它的差分数组前i项之和等于a[i]**,即为a[i]=b[0]+b[1]+...+b[i]。 差分的主要作用是快速实现区间修改,若要使 2024-07-30 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #前缀和与差分
[编程笔记]-Partial_Sum前缀和 一维前缀和思想及实现这里主要还是引入前缀和的思想,这个算法在后面还是挺常用的,可以搭配各种算法,减少时间复杂度。 前缀和呢,就是一个数组的某段前缀内的所有元素之和。举个栗子,{0,1,2,3,4,5,6},对于这个数组,前四位的前缀和是0+1+2+3==6,前三位的前缀和是0+1+2==3。 前缀和的主要作用就是查询一段区间的元素之和。令s[i]表示a[]前i位的和,则a[i] 2024-07-30 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #前缀和与差分
[编程笔记]-High_Precision(Mul and Div)[SIM]高精度乘除法(基础版) 前言鉴于此篇博客用于学习or巩固基础部分,故而这里只记录大数与int类型的小数的乘除计算,大数乘大数将会在“[编程笔记]-High_Precision(Mul and Div)[COM]高精度乘除法(提高版)”教学。 emmm就这样吧(。·ω·。) 思路乘法其实就跟列竖式差不多,把大数列在下面、小数列在上面,直接乘。 别忘了去前导0~ 除法就是用机器去模拟手写嘛。鉴于除法相较于其他三种计算有些复杂 2024-07-29 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #高精度
[编程笔记]-High_Precision(Add and Sub)高精度加减法 前言这篇博客并不打算多细致地讲解高精度,但是!但是!我会给出代码模板,并且在注释中讲解大多数内容。 就这样吧。( ̄︶ ̄) 思路emmm小学数学会吧?不会您先别看了 就用小学数学的思路做就完事了。 代码加法12345678910111213//这里使用vector储存大数,因为它自带size函数,当然直接用数组也没有问题。vector<int> add(vector<int> 2024-07-28 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #高精度
[编程笔记]-Binary_Search二分查找 前言二分也算是比较普遍且常用的一个算法了,并且在前期还是个小难点,其相对复杂的类型以及边界问题通常让蒟蒻们很是头疼。 这一篇博客主要讲解二分查找的原理、模板等(不是二分答案),并不着重深入讲解其各种变式。 就这样吧(~ ̄▽ ̄)~ 原理二分查找就是把一段元素分成两半,用中间值进行对比,判断查找元素在其左侧或右侧,并在那一半进行查找,以到达O(logn)的复杂度。 因此,理论上来说,所有单调性问题都可 2024-07-28 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #搜索 #二分
[编程笔记]-Merge_Sort归并排序 原理利用分治思想,把数组对半分成两份,各自排好序,再将两个排好序的数组合并成一个数组即可。 (或许有点废话?Σ(っ °Д °;)っ) 实现这里着重讲以下合并数组的过程: 建立两个指针,指向两边各排好序的数组的首个元素。 对指针指向的元素进行对比,更小的(从小到大排序)插入临时数组,直到其中一个指针走到结尾。 把两个数组中剩下的元素插入临时数组(其实只会有一个有余,这里不做解释) 用临时数组 2024-07-27 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #排序
[编程笔记]-Quick_Sort快速排序 原理原始版利用分治思想,新建两个数组,分别储存原数组中小于 X 或大于 X 的元素,并分别对其进行快速排序,最后重组原数组即可。(X可为任意值,推荐使用中值) 进化版利用分治思想以及部分双指针思想,左右各两个指针,记为 i, j。左指针一直向右,直到数组中第 i 个元素大于 x;右指针一直向左,直到数组中第 j 个元素小于x;接着左右指针对应元素互换,重复执行直到左右指针相遇。 复杂度平均O(nl 2024-07-26 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #排序