
【代码实战例题】
文章平均质量分 78
通过具体题目,来介绍一些算法的实现过程以及一些常用的解题思路,同时,也会有一些有趣的AC题解:)
PL_涵
路漫漫其修远兮,吾将上下而求索。在校大学生。更新自己学习知识的过程与心得。由于本人能力较低,如有不当之处,还请多多包容:)
展开
-
分割回文串--切割问题
比如对于样例1,开始让第一个隔板的位置为0,第二个隔板的位置为1,那么分割的子串就是[0, 1),也就是 ' a ',然后判断其是不是回文串,如果是,则说明这组隔板的位置可以,然后让第一个隔板的位置等于第二个隔板,然后让第二个隔板的位置等于第一个隔板的位置 + 1,也就是[1 , 2),那么分割的子串就是 ' b ',然后判断,所以这组隔板的位置也可以,然后继续移动第一个隔板,也就是 2 ,即到了字符串的末尾,说明这一组分割方案是可以的,即 'a', 'b'。从上面的分析过程,可以很显然的看出,原创 2023-03-21 23:47:59 · 453 阅读 · 0 评论 -
电话号码的字母组合(不同集合)--回溯问题
但是这样的方法在组合数的数量变多时,需要的for循环也就越多,时间复杂度不说,写起来就受不了。在这个过程中,我们需要知道电话号码的位数,其次我们还需要知道现在是第几位电话号码对吧,这样才能够取得每一位对应的字母,也就是每一层递归对应的横向迭代集合。输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]首先确定边界条件,也就是当递归的结果字符串的size == 电话号码的位数时即可。大家可以再翻到上面的for循环版本对照的看一下,可以发现二者的思路是完全一样的,原创 2023-03-19 17:25:42 · 143 阅读 · 0 评论 -
组合(同一集合)--经典回溯问题
回溯的关键不在于递归,而是在于“回”上,也就是回去之后要撤销掉之前的操作,具体来说,就是在return回上一层递归之后,要将之前递归的操作消除,也就是要让变量的状态回到第一次递归到该层时的初始状态,因为回溯本质上仍然是枚举。回溯可以说是递归的横向拓展,它主要是递归(纵向)+局部暴力枚举(横向),所以我们可以从递归和枚举两个方面来拆解回溯问题。在回溯算法中,我们可能经常看到“剪枝”这个词,我们知道递归算法的时间复杂度也是比较高的,尤其是在递归较深的时候,所以。实际上,对于上面的for循环嵌套,原创 2023-03-15 22:09:59 · 155 阅读 · 0 评论 -
成绩统计--四舍五入取整
题目描述小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。输入描述输入的第一行包含一个整数 n ,表示考试人数。接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。输出描述输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。原创 2023-03-14 20:08:48 · 779 阅读 · 0 评论 -
高精度乘法--模拟
上图就是利用竖式进行乘法计算的过程:首先把数位较多的数写在上面,数位较少的数写在下面,然后上下数字的数位要对齐,然后将下面因数的个位数与上面因数的个位相乘,然后把它们积的末位写在个位上,再与十位上的数相乘写在十位上,以此类推。再对下面因数的十位数进行乘积运算,需要注意的是,此时与上面因数个位乘积的末位是对齐在乘数的十位下面,即此时 2 × 8 的末位 6 是对齐乘数 2 的。由于相乘之后的位数较大,已经超过了可存放整数的范围,需要开辟数组来存放乘积结果的每一位数。现在输入两个整数,请输出它们的乘积。原创 2022-11-22 22:50:49 · 376 阅读 · 0 评论 -
整数小拼接--二分法
一前一后拼成一个新的整数。例如 12 和 345 可以拼成 12345 或 34512。二分查找可以自己写一个,也可以选择直接用C++函数库里的。使用两层循环迭代所有可能的组合,并判断连在一起是否小于。,也就是只能通过30%的用例,得分 30 pts。即首先将原数组先排序,然后用一层循环枚举每一个。请你计算有多少种拼法满足拼出的整数小于等于。,然后利用二分查找,找出能够满足条件的。的顺序被视为 2 种拼法,即便是。可以估计出算法的时间复杂度为。,因为拼接后的数可以很大。拼接两个整数时,可以使用。原创 2022-11-21 17:51:20 · 937 阅读 · 0 评论