算法
BREKOJI
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法800. 数组元素的目标和
这里j>0是为了后面j不为负数,比如说a[N]=123456,b[N]=45678;x为6,如果不加j>0就会出现两个结果:10和5-1。注意,while(j>0&&a[i]+b[j]>x)j--;原创 2025-01-17 17:41:53 · 138 阅读 · 0 评论 -
算法799. 最长连续不重复子序列
每次i加1,q[i]对应的计数都加1,如果q[i]大于1了,说明有两个重复的了,从j开始查找(是s[q[j]--,q++)是哪一位开始重复的,查找到重复位后,j再后移一位,之后计算不重复子序列数目就从现在这个j开始算起。利用s[N]来记录不同数出现的次数,有点像计数排序的方法。每次i增加1都重新比较最大的不重复子序列数目。原创 2025-01-17 17:02:01 · 231 阅读 · 0 评论 -
算法_差分矩阵
差分矩阵就是要让a[i][j] = b[i][j] + b[i-1][[j] + b[i][j -1] +...+ b[1][1],就是a[i][j]要等于所有b[i][j]的所有子矩阵之和。b[i][j]+=c,则a[i][j]右下角元素都加c。原创 2024-12-31 16:31:45 · 144 阅读 · 0 评论 -
算法_差分
当在{ai}的一段区间[l,r]内每个数加上c,即让bl加上c然后再让br+1减去c,可以让时间复杂度为O(n)的操作变为时间复杂度为O(1)只需要一个insert操作就可以完成。即变为b1 = a1,b2 = a2 - a1,...,bn = bn - bn-1。输入一段序列,在[l,r]之间每个数都加上c,并输出最后的序列。即在l处加c,在r+1处减c。原创 2024-12-30 23:44:14 · 240 阅读 · 0 评论 -
算法_子矩阵的和
【代码】算法_子矩阵的和。原创 2024-12-30 17:02:01 · 107 阅读 · 0 评论 -
算法_前缀和
【代码】算法_前缀和。原创 2024-12-29 18:58:02 · 124 阅读 · 0 评论 -
算法_高精度除法
除法与加法、减法、乘法的计算顺序不同,除法要从高位开始计算。除法、减法、乘法都会出现高位为0的情况,要消除高位0。原创 2024-12-29 14:19:44 · 199 阅读 · 0 评论 -
算法_高精度乘法
mul函数最后的while循环实际上是解决b为0的问题,也可以用if函数(用while是与减法模板匹配记忆)这些高精度的都比较简单。原创 2024-12-29 13:31:03 · 158 阅读 · 0 评论 -
算法_高精度减法
每次计算前都要比较AB大小,当A小于B时计算B-A并输出-,当A>=B时计算A-B。sub中,每位相减完后,如果小于0,则下一位要减1,则令t=1,否则t=0;并且计算后t小于0要加10,大于等于0则直接输出t,整合起来就是(t+10)%10;最后计算的结果如果是00000xxx,则要把前面的0全部去掉输出,所以,当C.size()>1并且C的最后一位等于0时要pop掉最后一位。原创 2024-12-28 22:30:10 · 215 阅读 · 0 评论 -
算法_高精度加法
A与B用小端方式存储输入的a和b对应的数字。A与B各位分别相加,并用t(初始为0)记录每位相加的结果,t%10为相加后该位的结果,t/10为进位保留到下一位继续参与运算。原创 2024-12-28 21:32:04 · 155 阅读 · 0 评论 -
算法_求数的三次方根
【代码】算法_求数的三次方根。原创 2024-12-27 20:06:27 · 215 阅读 · 0 评论 -
算法_确定数的范围(二分法)
给定升序排序的长度为n的数组,查询m次(自定义次数)每次查询,返回一个元素的起始位置和终止位置(从0开始)如果数组中不存在该元素,则返回-1 -1实际上算法的流程就是1.用2分法缩小范围确定左边界位置 2.判断确定的位置对应元素是否等于x来确定是否是左边界 3.用2分发缩小范围确定右边界位置(该位置对应元素一定等于x)原创 2024-12-27 19:05:38 · 2166 阅读 · 0 评论 -
算法_逆序对的数量(归并)
所以最后这部分的逆序对之和就等于后半部分每个j对应的逆序对个数之和,每个j对应的逆序对个数为输出q[j]到tmp[k]时的mid-i+1(因为输出q[j]时q[j]原创 2024-12-26 19:02:20 · 307 阅读 · 0 评论 -
算法_归并排序
设置两个指针i和j,指向两个段的当前位置,设置一个数组tmp暂时记录归并过程中的元素以及一个指针k指向当前需要写入的tmp段位置。2.递归l~mid和mid+1~r区间得到两个有序归并段。1.递归结束的条件为l == r。3.归并两个有序归并段。原创 2024-12-26 13:22:39 · 211 阅读 · 0 评论 -
算法_第k个数(快速选择)
如何选择递归并返回哪一部分?在快速排序内设置sl记录l~j部分的长度,如果sl >= k则第k个数落在前一部分,否则k落在后一部分。3.根据第k个数所在位置,选择用快速排序递归l~j部分还是j+1~r部分并返回递归的值(递归返回到第1步执行)1.如果l == r则第返回q[l](递归到最后只剩一个数就是第k个数)3.快速排序内的递归两个部分变为根据k的位置递归并返回其中一部分。2.结束递归条件为最后返回l == r。1.相比快速排序增加了k参数。2.快速排序数组q的l到r。原创 2024-12-25 23:53:53 · 341 阅读 · 0 评论 -
算法_快速排序的边界问题
因为小于i的范围(小于等于j的范围)都是小于等于x的,大于j的范围(大于等于i的范围)都是大于等于x的,所以是l~i-1(或l~j)和i~r(或j+1~r)。当基准选择l或(l+r)/2对应值时若递归区间选择l~i-1和i~r,则在递归到最后只剩2个数(即l=r-1的情况)时,若第一个数小于第二个数,则选择的基准是2个数的第一个即q[l](q[(l+r)/2]),会出现i=j=l,最后递归区间即变成l~l-1和l~r,第一个递归直接退出,第二个递归会陷入不断执行l~r区间无限递归的问题。原创 2024-12-25 21:40:03 · 1082 阅读 · 2 评论
分享