自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ACWing 1018. 最低通行费(DP)

注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。而在经过中间的每个小方格时,都需要缴纳一定的费用。的正方形的网格,去参加一个非常重要的商务活动。这个商人期望在规定时间内用最少费用穿越出去。基本一样了,只不过将最大值换成了最小值。的正整数,为网格上每个小方格的费用。位置的最小通行费,最终所求结果即为。第一行是一个整数,表示正方形的宽度。输出一个整数,表示至少需要的费用。他要从网格的左上角进,右下角出。发现不能走回头路的性质后就和。个单位时间穿越出去。关键信息:时间不超过。

2022-10-26 13:17:44 161

原创 ACWing 1015.摘花生(DP)

地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。对每组输入数据,输出一行,内容为Hello Kitty能摘到得最多的花生颗数。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。个整数,按从西向东的顺序描述了该行每株花生苗上的花生数目。行数据,从北向南依次描述每行花生苗的情况。每组数据的第一行是两个整数,分别代表花生苗的行数。对于每一个位置,仅可由上方的位置和左边的位置走到。所能捡到的最多的花生数,最终题目所求结果即为。

2022-10-26 12:24:07 207

原创 (迪杰斯特拉)Dijkstra算法及其优化(C++)

迪杰斯特拉算法是由荷兰计算机科学家在1956年发现的算法,是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。条边的有向图,图中可能存在重边和自环,所有边权均为非负值。,对此可以考虑用堆这种数据结构对其进行优化,将最耗时的。然后将距离为2的边所对应的节点2加入。,我们可以发现,如果边数远小于。e为该点的边数,所以复杂度降为。号点的最短距离,如果无法从。

2022-10-05 12:48:27 6762 2

原创 LeetCode-670.最大交换(C++)

的值越小越好(位数越高),则若能在更高位找到满足相同条件的数(若其值小于低位上每个数最大值),更高位交换操作效果更优。所以从低位开始循环:对于每一位上的数,若其值大于低位上每个数的最大值,则这个数和低位上任何一位数交换都会使总体数值变小,故不交换,更新最大值,进行高一位的判断即可。若其值小于低位上每个数最大值,则这个数和这个最大值进行交换可以一定程度上的提升总体数值,但此时并不一定是最优答案,因为。其次,若是将当前位更新为最大值所在位,则后面出现解的时候,是高位。,不更新最大值所在位,则交换后为。

2022-09-13 19:06:52 421

原创 ACWing 830. 单调栈(C++)

对于每一个数,我们检查栈顶,比较栈顶元素与当前数的大小,若栈顶元素小于当前数,则栈顶元素即为所求值,并将当前数入栈;若栈顶元素大于等于当前数,则出栈(因为不是当前所求的满足条件的数,且因为其大于等于当前数,所以对后面出现的数已不可能构成有效答案)直到栈顶元素小于当前数为止。我们可以用栈来储存可能是答案的数值,显然由上述结论可知,栈中元素肯定是单调递增的。朴素做法:双重循环遍历,对每一个数都遍历前面所有数,找其到左边第一个比它小的数,较慢。的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出。

2022-09-12 10:41:43 375

原创 ACWing 803. 区间合并(C++)

先将区间按左端点进行排序,排完序后进行区间合并。排完序后,对于一个区间,若下个区间左端点小于等于当前节点右端点,则两个区间有交集,可以进行合并(即更新右端点),合并后继续去看下一个区间;若不能合并,则后面所有区间均不能与当前区间进行合并,将此区间暂时储存,对接下来的区间进行下一轮的合并。结束合并后,看已储存的区间总个数是多少,即为题中所求区间个数。共一行,包含一个整数,表示合并区间完成后的区间个数。,要求合并所有有交集的区间。输出合并完成后的区间个数。行,每行包含两个整数。

2022-09-12 00:05:01 413 2

原创 ACWing 802. 区间和(C++)

离散化操作:将很大长度的一个区间映射到较小范围上。只需将所有出现过的端点进行排序和去重,并按此编号即可。),不宜用直接用数组储存,且实际上题中用到的区间范围并不多(之内的数,可以用数组进行储存,并使用前缀和的方法进行求解。假定有一个无限长的数轴,数轴上每个坐标上的数都是。行,每行输出一个询问中所求的区间内数字和。可以发现,此时经过离散化后,端点值变为了。次询问,每个询问包含两个整数。中所有数之和,即求数组在下标。行,每行包含两个整数。行,每行包含两个整数。),所以使用离散化操作。),但是区间范围过大(

2022-09-11 20:47:23 351

原创 ACWing 800. 数组元素的目标和(C++)

右移一位,循环继续。先看朴素算法:直接用双重循环遍历数组。的值必然要减小才有可能使得。给定两个升序排序的有序数组。的所有可能,时间复杂度为。尽量向左滑动至第一个满足。同一数组内元素各不相同。的下标处,若此时满足。共一行,包含两个整数。

2022-09-11 12:40:57 146

原创 AcWing 799. 最长连续不重复子序列(C++)

朴素做法:双重循环,对区间 [i,j] 进行重复性检查。i 可以遍历所有的终点情况,j 结束循环是已找到对于终点 i 最远的起点,之后对所有终点情况取最小值即可。此做法时间复杂度为 O(n^2)

2022-09-09 12:19:23 335

原创 ACWing 798. 差分矩阵(C++)

每个操作都要将选中的子矩阵中的每个元素的值加上。个整数,表示所有操作进行完毕后的最终矩阵。表示一个子矩阵的左上角坐标和右下角坐标。将选中的子矩阵中的每个元素的值加上。请你将进行完所有操作后的矩阵输出。个操作,每个操作包含五个整数。最后再逆运算即可求出变换后的。行,每行包含 5 个整数。列的整数矩阵,再输入。个整数,表示整数矩阵。,将其从一维扩展至二维。故每次操作只需对数组。

2022-09-04 17:27:20 392

原创 ACWing 797. 差分(C++)

求前缀和即可得到题目所求最终序列。个操作,每个操作包含三个整数。请你输出进行完所有操作后的序列。进行差分处理,得到差分数组。个整数,表示整数序列。行,每行包含三个整数。个整数,表示最终序列。因此每次操作只需要将。

2022-09-04 15:24:03 508

原创 ACWing 796. 子矩阵的和(C++)

表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。个询问,每个询问包含四个整数。对于每次的询问操作,子矩阵之和。行,每行输出一个询问的结果。,即将其由一维扩展到二维。列的整数矩阵,再输入。个整数,表示整数矩阵。行,每行包含四个整数。思路类似于前缀和,见。

2022-09-04 10:07:20 645

原创 ACWing 795. 前缀和(C++)

网站提交本程序后发现程序的运行时间还是比较长,达到了。但注意到本题的数据范围,若使用此方法时间复杂度为。改进后的算法最终时间复杂度应为。首先,本题可轻易想到暴力解法,即每次输入。,过于耗时,因此我们想办法改进。,发现运行时间明显变短,变为了。对于每个询问,输出原序列中从第。即可一次操作求得原序列中从第。行,每行输出一个询问的结果。,操作次数可能会多达 10。,表示一个询问的区间范围。复杂度求得其前缀和数组。个询问,每个询问输入一对。可以减少程序运行时间。个整数,表示整数数列。行,每行包含两个整数。

2022-09-03 17:46:06 327

原创 ACWing 794. 高精度除法(C++)

每一次计算都可能会产生余数,这些余数都会乘以10,再加上下一位的数作为下一次计算的被除数,如此往复循环,高精度整数最低为的计算结束后,此时循环结束,所留下的余数即为除法的最终余数,输出至结果中。因为是从高位到低位进行计算,为方便与统一格式,计算结束后将高精度整数结果(商)逆序,并筛除前导0,得到最终结果。高精度整数(被除数)从高位至低位逐位除以普通整数(除数),每一位都会计算一次。共两行,第一行输出所求的商,第二行输出所求余数。给定两个非负整数(不含前导 0)共两行,第一行包含整数。

2022-09-03 17:02:08 199

原创 ACWing 793. 高精度乘法(C++)

本题名为高精度乘法,实为高精度整数与普通整数相乘,而并非两个高精度整数相乘,故难度有所降低。 类似于高精度加法,本题从低位至高位将高精度整数每一位乘以普通整数。每次计算得到的结果由几部分相加构成:从低位来的进位、本位相乘结果。

2022-09-03 16:29:01 106

原创 ACWing 792. 高精度减法(C++)

若被减数小于减数(此时差结果为负数),则交换二者位置再送入相减函数中进行运算,并输出负号;若大于,则不交换,不输出任何符号,直接将二者送入相减函数运算;若相等,则直接令结果为0。3.相减函数中运算过程与高精度加法类似,从低位向高位逐位相减,不够减的向高位借位,因函数是大数减小数,所以相减过程最高位必然够减。2.在相减函数中只进行大数减小数运算(简化运算过程),函数返回值即为题中所求差的结果的绝对值。4.此有可能出现前导0(高位有无效的0,例如:00072),需要进行前导0的筛除。共一行,包含所求的差。

2022-09-03 13:06:35 157

原创 ACWing 791. 高精度加法(C++)

使用 vector 进行高精度整数的储存,在add函数中对其各位分别相加。两个个位数相加至多是两位数,则其中未超过10的部分(个位)作为该位的加法结果,超过10的部分(十位)加至后一位,留至后位相加时处理。给定两个正整数(不含前导 0),计算它们的和。共两行,每行包含一个整数。共一行,包含所求的和。

2022-09-02 17:53:54 132

空空如也

空空如也

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

TA关注的人

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