自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 双指针之最长连续不重复子序列问题(巨

我们看到题目中给的 n 的范围并不大,所以可以开辟一个数组,以这个数作为数组下标,存储这个数字出现的次数,感觉有点像H-index那道题 (那 n 的范围大的话怎么办呢,答用哈希表,但是目前还没学到数据结构这部分哈)双指针一般有两种类型,第一种是每个指针指向各自的一个序列,两者遍历的内容并不会重合,典例是之前学的归并排序中归并的过程,第二种是指向同一个序列,像快排是两个指针相向而行,叫做。给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。所以有必要优化一下了,那么。

2025-03-15 00:33:34 656

原创 二维差分问题----个人学习总结(C++)

我们看到上图第三个矩形,如果在所示位置加 c ,那么最后在求 b 数组的前缀和的时候,会让打对号的位置都加上 c ( 因为它们和左上角的连线的矩形中都会包含 +c 的那个数,可以先回忆一下二维前缀和怎么求,基本公式是s [ i ] [ j ] = s [ i - 1] [ j ] + s[ i ] [ j - 1] - s [ i - 1] [ j - 1] + a [ i ] [ j ]这里我们需要类比前面插入 c 的方式,把 a 数组里面的数看成插入 c ,我们具体看代码分析一下。

2025-02-24 23:07:28 978

原创 差分问题----个人学习总结(C++)

在前缀和问题中,我们是把原有数组变为前缀和数组,而在差分中,我们要构造一个数组,使原有数组是这个数组的前缀和数组。举例来说,设题设中读入的数组是a [ i ],构造的数组是b [ i ] ,那么有 b [ 1 ] = a [ 1 ], b [ 2 ] = a [ 2 ] - a [ 1 ], b [ 3 ] = a [ 3 ] - a [ 2 ].......我们按照前缀和的方式把 b 数组加起来就发现最后会得到 a 数组。接下来 m 行,每行包含三个整数 l,r,c表示一个操作。

2025-02-21 19:24:07 451

原创 二维前缀和_子矩阵的和问题————个人学习总结(C++)

假如我们要求图b在粉色方块中的数之和,我们看到图c,这个矩形其实等于左上角所有涂色的框 减去 最左边涂色的一列 和 最上边涂色的一行 加上 左上角减了两次的那一个方块。首先我们是从左到右一行一行处理的,当只处理一行的时候其实是一位的前缀和数组,但关键是到第二行如何处理。输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。因为是从1开始计数的,第0行和第0列的数都是0,所以这个公式每一行都是适用的。

2025-02-18 22:29:16 324

原创 高精度除法----个人学习总结(C++)

前面的高精度都是逆序存储,但是这里除法不存在进位借位问题,其实不必要逆序但是一道题中不一定只有除法,所以为了和前面的统一这里除法也采用逆序存储,算法逻辑也是模拟正常除法算式运算。而且这里仅讨论高精度除以低精度的除法情况。题目要求:给定两个非负整数(不含前导 0)A,B请你计算 A/B的商和余数。

2025-02-09 19:28:13 165 1

原创 高精度乘法模板----个人学习总结(C++)

这里我们用 i 遍历 A 的每一位,当 A 没有被遍历完 且 最后没有进位时我们进行循环,循环如下。先判断A是否遍历完,因为在A遍历完但进位没有解决时也会进入循环所以在此需要判断,然后 t 存储本位运算的结果,存储 t 取模10后的结果,再自身除以10存储进位情况。用两层循环遍历两个数,将个位视为第零位十位视为第二位以此类推,C[i+j] += A[i] * B[j]是将对应位相乘结果相加并存在相应位上,这个可以举具体实例模拟一下就清楚了,最后处理进位的方式与前面高精度乘低精度类似就不赘述了。

2025-02-08 20:47:21 318 2

原创 高精度减法模板----个人学习总结(C++)

首先是结果有是负数的情况,我们再计算这种情况时通常是令大数减去小数再加一个负号,因此我们首先我们需要比较两个数的大小,如果是较小的数减去较大的数就需要先输出一个负号,然后变成常规的较大数减去较小数。首先A是较大数,先加上A再减去上次借位的结果 t ,而B是较小数,可能会存在本位上没有数的情况,因此先判断B在第 i 位上是否有数,如果有就减去。的函数,首先看两个数的位数是否相等,如果不相等则位数多者更大,否则从高位开始比较每一位数的大小,当本位上两数不相等时,数大者更大。存入,和高精度加法一样就不赘述了。

2025-02-07 16:27:39 316 1

原创 高精度加法模板----个人学习总结(C++)

首先需要一个数组存储结果,且需要一个 t 表示每次本位要存的数,因此先初始化为0,从第0位开始计算,当两个数的位数还没有遍历完时进行如下循环,先判断第一个数位数是否遍历完,如果没有,就让 t 加上第一个数的第 i 位的数,第二个数同理。中的a[i] - ‘0’是将字符数组(或字符串)中的字符转换为对应的整数值的常见方法。对于C++的数据存储类型,int和long long都有一定的数字范围限制,而高精度运算的算法可以处理很长的数据,比如数字位数有十万的,而算法本质也是模拟小学学到的加法运算逻辑。

2025-02-06 21:53:47 224

原创 二分算法模板解决数的范围问题----个人学习总结(C++)

当满足 l < r 的条件时我们进行如下操作,判断处于mid位置的数是否符合左半区的性质,如果符合说明它在红色区域且有可能位于边界点,那么我们就更新区间为 [ mid , r ],否则便处于蓝色区域,那么我们就更新区间为 [ l , mid -1 ]。当满足 l < r 的条件时我们进行如下操作,判断处于mid位置的数是否符合右半区的性质,如果符合说明它在蓝色区域且有可能位于边界点,那么我们就更新区间为 [ l , mid ],否则便处于红色区域,那么我们就更新区间为 [ mid + 1 , r ]。

2025-02-05 21:19:36 434 2

原创 逆序对问题——归并排序做法(个人学习总结.C++)

对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对,否则不是。简而言之就是数列中靠前的数要比靠后的数大,那么这两个数可以组成一个逆序对。

2025-02-04 21:02:45 224

原创 归并排序----个人学习总结(C++)

当左右边界重合相遇时停止。2.

2025-02-03 21:19:12 297 2

原创 快速排序----个人学习总结(C++)

不清楚的地方一般模拟一下就十分明朗了。

2025-02-02 20:50:30 268 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除