刷题
文章平均质量分 72
有效的放假者
这个作者很懒,什么都没留下…
展开
-
每日一练30&&31——最难的问题&&因子个数&&分解因数
我们很清楚的知道,要想求出它的每一个质因数,我们需要用质数去试除。90能被2整除,那就拿商继续除以2,除不尽就换3除,如果3还能被整除,那么就一直循环除3,除不尽就换4,一直到除到质数为止。基础代码框架类似判断质数,只是被判断的数字在过程中不断被除,最终循环结束的时候,那个被处理过的数字,就是最后一个质因数。本题题意明确,对于A到E之间的密文(包括A和E),加上21就是对应的明文。小学的知识,分解因数。对于F到Z之间的密文(包括F和Z),减去5就是对应的明文。本题应该是求的质因子的个数。原创 2023-04-05 11:21:58 · 147 阅读 · 0 评论 -
每日一练28&&29——反转部分单向链表&&猴子分桃&&求正数数组的最小不可组成和(难)&&有假币
可以放入5,3-4放入3,2只能放入2 当数组中放入2,3,5重量时,背包承重10放入10,8-9放入8,7放入7,5-6放入5…后对最轻的那份再次进行称重,直到称重的个数不足2个时则结束,获得假币;方法一的弊端:假设需要反转的链表部分,占比比较大,则需要两次遍历链表来实现.当数组中只有2重量的时候,背包承重从2-10都可以放入2的数值。平均分三份是最快的方法,两份进行称重(对比出三个的重量 ),根据承重和已有的重量种类阶段性计算当前承重时能够放入的重量。当数组中放入2和3重量的时候,背包承重从5-10。原创 2023-04-04 20:39:56 · 440 阅读 · 0 评论 -
每日一练26&&27——变态跳台阶&&快到碗里来&&不用加减乘除做加法&&三角形
这个题目很容易理解,只要输入的猫的身长小于碗的周长即可,通过输入碗半径计算得到周长,与输入的猫的身长相比较。有三阶台阶的时候可以有 f(3) = f(2)+f(1)+f(0)=4;假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2);假定第一次跳的是3阶,那么剩下的是n-3个台阶,跳法是f(n-3)假定第一次跳的是n-1阶,那么剩下的是1个台阶,跳法是f(1);有两阶台阶的时候可以有 f(2) = f(1)+f(0)=2;假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是1种(原创 2023-04-02 17:20:15 · 384 阅读 · 0 评论 -
每日一练24&&25——年终奖&&迷宫问题(难)&&星际密码(易错)&&数根(接收数据的方法)
搜索所有从左上角走到右下角的路径,找到最优路径。通俗的来讲对于f(2,1),要算最大,那么就要选择从上面来的奖励更大还是从左面来的奖励更大。原创 2023-04-01 21:45:32 · 362 阅读 · 0 评论 -
每日一练22&&23——小易的升级之路&&找出字符串中第一个只出现一次的字符&&微信红包&&计算字符串的编辑距离(难)
F(i-1,j-1): w1[1,…,j-1]的编辑距离,如果w1[i]与w2[j]相同, 不做任何操作,编辑距离不变,如果w1[i]与w2[j]不同,替换w1[i]的字符为w2[j]—>F(i,j)初始化: 初始化一定要是确定的值,如果这里不加入空串,初始值无法确定 F(i,0) = i :word与空串的编辑距离,删除操作。,j]的编辑距离,删除w1[i]的字符—>F(i,j),j-1]的编辑距离,增加一个字符—>F(i,j)F(i,j):word1的前i个字符于word2的前j个字符的编辑距离。原创 2023-03-30 18:24:17 · 105 阅读 · 0 评论 -
每日一练20&&21——字符串反转&&公共子串计算&&洗牌&&MP3光标位置
本题题目的意思是模拟洗牌过程,牌被分成两组,且每组数量相等,然后每组牌从最后一个牌交叉排列,最后再把排列逆序就是一次洗牌的过程,K次需要重复K次这样的过程。字符串反转,需要交换首尾字符,设置首尾两个位置start,end,每次交换首尾字符,然后start++, end–,直到start,end相遇,反转完成。每次读取一个数之后,算出他经过k次洗牌后的位置,只用一个长度为2n数组用来输出根据当前数的位置,可以算出经过一次洗牌后的位置,原创 2023-03-27 21:24:53 · 273 阅读 · 0 评论 -
每日一练18&&19——统计每个月兔子的总数&&字符串通配符(难)&&汽水瓶&&查找两个字符串a,b中的最长公共子串(难)
第n个月的兔子数量由两部分组成,一部分是上个月的兔子f(n-1),另一部是满足3个月大的兔子,会生一只兔子f(n-2)。所以第n个月兔子总数: f(n) = f(n - 1) + f(n - 2)。本题是在变相考察斐波那契数列。从前向后一次匹配,遇到相同字符,都向后移动一个字符;,则不需匹配,自动跳过一个字符;本题可以通过递归求解。原创 2023-03-25 18:57:18 · 392 阅读 · 1 评论 -
每日一练16&17——C++完全数计算&&扑克牌大小&&杨辉三角的变形&&计算某字符出现次数
本题的题目意思是输入的只是这些类型中的一种,个子,对子,顺子(连续5张),三个,炸弹(四个)和对王。其实就是最多5张牌(顺子),最少1一张牌之间的比较。本题可以通过遍历每一个约数,求和,判断完全数。约数计算可以遍历sqrt(n)的范围。原创 2023-03-24 20:40:40 · 157 阅读 · 0 评论 -
每日一练15——C/C++查找输入整数二进制中1的个数&&手套问题(难)
本题是计算一个数二进制表示中1的个数,通过(n >> i) & 1可以获取第i位的二进制值,每次n右移一位,可以获取一位的二进制值,右移32次,n变成0,循环终止。而对于某一边某种颜色数量是0,则需要直接将另一边对应颜色的手套数加到SUM中,才能保证覆盖每一种颜色(从最坏的情况来考虑),这个仔细想一下其实就可以明白。代表左右手颜色不为0的小的那一边的手套数,取数量小的那一边,我们达到所有颜色都覆盖的目的即可,要整体考虑。) ,所以对于左右手手套颜色都有数量的序列,想要覆盖每一种颜色,则最小数量。原创 2023-03-24 19:00:35 · 237 阅读 · 0 评论 -
每日一练14——C/C++计算日期到天数转换&&幸运的袋子(难)
可用数论证明:设a=1+x,b=1+y,则1+x+1+y>(1+x)(1+y),—> 1>xy,则x,y必有一个为0,即a,b有一个为1。ak,如果不满足给定条件,即和sum小于等于积pi。如果此时再选择一个数b,能使其满足sum+b > pib,则,b必然为1,且为必要非充分条件。反之,如果选择的b>1,则sum+b原创 2023-03-22 21:28:53 · 146 阅读 · 0 评论 -
每日一练13——C/C++参数解析问题&&跳石板问题(难)
参数解析思路:代码:跳石板思路:代码及注释:原创 2023-03-20 21:39:15 · 146 阅读 · 0 评论 -
C++——二叉树进阶oj题
二叉树创建字符串二叉树的分层遍历1二叉树的分层遍历2给定一个二叉树, 找到该树中两个指定节点的最近公共祖先二叉树搜索树转换成排序双向链表。根据一棵树的中序遍历与后序遍历构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树原创 2023-02-18 19:35:20 · 352 阅读 · 0 评论 -
C++——二叉树的前序遍历||中序遍历||后序遍历 非递归算法
二叉树的前序遍历,非递归迭代实现二叉树的中序遍历 ,非递归迭代实现二叉树的后序遍历 ,非递归迭代实现思路及其代码原创 2023-02-18 19:29:32 · 545 阅读 · 0 评论 -
每日一练12——二进制插入&&查找组成一个偶数最接近的两个素数
判断一个数是否为素数一般来讲是从2到它本身-1,看这个区间的数是否能整除这个数,但其实正常来讲,开平方之前的数如果能整除这个数,后面的数就不用判断了。为了提高效率,使用sqrt函数对被判断的数进行开平方,为什么进行开平方呢?要把n的二进制值插入m的第j位到第i位,只需要把n先左移j位,然后再进行或运算(|)即可。本题首先需要判断素数,素数表示除过1和本身,不能被其它数整除。约等于3.31,就判断2和3是否能把11整除就可以了。假如2不能把12整除,那么6也是不能整除12的。因为如果2能把12整除,那么。原创 2023-02-02 20:49:07 · 193 阅读 · 0 评论 -
每日一练11——最近公共祖先&&求最大连续bit数
b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先。让1每次左移一位,然后和输入的值做与运算,获取其每一位的二进制值。如果是byte类型的数据,利用for循环,把1从0开始,左移7位之后结束统计。如果是int类型的数据,利用for循环,把1从0开始,左移32位之后结束统计。如果1连续,则计数累加,如果不连续,则count从0开始计数。上述树中子节点与父节点之间的关系为root = child / 2。好处:适用于正数、0和负数。原创 2023-02-02 18:04:17 · 195 阅读 · 0 评论 -
每日一练10——井字棋&&密码强度等级
这里对于不同种类的字符得分不同,对于长度,字母,数字,符号单独判断,最后把所有的单项值根据题目要求相加,输出对应的安全级别。这样就可以选出来 符合最多的那一种奖励 同时if else语句也显得更加逻辑清晰。井字棋,是一种在3*3格子上进行的连珠游戏,三个相同就代表获胜。如果扩展为N*N的话,判断和是否等于N,下面代码适用任何情况。然后不满足五分的再看看是否满足3分的条件,其次是2分的,可以先从条件最多的五分的下手,先看看是否满足5分的条件。最好是先从条件较多的 先判断。原创 2023-02-01 18:53:13 · 435 阅读 · 0 评论 -
每日一练9——另类加法&&走方格的方案数
求和后当前的数据位: 0000 0010;求和后进位的数据:0000 0010。求和后的数据位:0000 0000;求和后的进位:0000 0100。求和后的数据位:0000 0100;求和后的进位:0000 0000。两个数求和,其实就是 求和后当前位的数据+两个数求和的进位。当进位为0,那么就返回当前的数值位就是1+3的答案。因为当前数据位和进位都不为0,所以数据位要加上进位。因为当前数据位和进位都不为0,所以数据位要加上进位。根据上面的规则,我们来简单操作一下。原创 2023-02-01 11:36:45 · 330 阅读 · 0 评论 -
每日一练8——C/C++(牛客)两种排序方法&&求最小公倍数问题
思路很简单,将接受的字符串都放到vector容器中,利用string的operator>=运算符重载来按ascii比较字符串,string>=运算符重载和compare默认就是按字典序进行比较,利用string的size来比较字符串的长度即可。辗转相除法,是指用于计算两个非负整数a,b的最大公约数。原创 2023-01-13 22:29:54 · 92 阅读 · 0 评论 -
每日一练7——C/C++合法括号序列判断问题&&Fibonacci数列问题
题目链接用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有对应的左括号,如果有则出栈,如果没有或者当前栈为空,则说明不匹配。用栈的思想解决本题,原本题目里指的括号只有小括号,但是这里的代码是把大括号和中括号考虑进去了。代码二:利用C++栈结构来解决问题。Fibonacci数列题目链接本题是对于Fibonacci数列的一个考察,Fibonacci数列的性质是第一项和第二项都为1,后面的项形成递归:F(n) = F(n - 1) + F(n - 2)。【解题思路】:本题可以通过先找到距原创 2022-12-07 13:11:39 · 436 阅读 · 2 评论 -
每日一练6——C/C++不要二问题&&把字符串转换成整数问题
解题思路比较简单,就是上次计算的结果 * 10,相当于10进制进位,然后加当前位的值。1、按照输入的长和宽M和H,我们设置一个H行M列的二维数组,每个位置都初始化为1。一个坐标位置放了蛋糕,跟他欧几里得距离为2的位置不能放蛋糕,这个就是关键点。位置为0,下次过来就不能再放蛋糕了,后面为0的位置什么都不用干直接跳过。也就是说:如果(x1,y1)放了蛋糕,则满足。本题本质就是在二维数组中每个坐标去放蛋糕,可以看出:假设放蛋糕的位置是。表达式结果不能等于2或3。位置放蛋糕时,那么就要标记。,则不能放蛋糕的位置。原创 2022-11-28 17:51:44 · 485 阅读 · 1 评论 -
每日一练5——C++连续最大和问题&&统计回文问题
这个元素之前那一坨数的连续最大和,不是这个元素之前全部数据加起来的和。每一次都是这个元素与这个元素+TempMax相比,谁大就说明谁是当前的连续最大和,然后存到TempMax,然后每次再跟Max比较一下,其实Max就充当的是整个过程出现过的TempMax的最大值,如果当前出现的连续最大和TempMax比曾经的Max大就更新一下Max,最后这个Max就是在一个过程中出现过的最大值。本题是一个经典的动态规划问题,简称dp问题,本题题意很简单,就是求哪一段的子数组的和最大,考察前面和对之后是否有贡献。首先以后面对原创 2022-11-27 22:36:06 · 224 阅读 · 0 评论 -
C++——电话号码的字母组合问题
回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是不完整的)。每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列。然后进行回退操作,遍历其余的字母排列。但是思路易想,实现难,回溯我们这里就采用多路递归,比较难想的就是要考虑清楚递归的时候要传什么变量去控制递归的深度,然后需要考虑是函数调用时是传值?原创 2022-11-27 12:24:22 · 689 阅读 · 0 评论 -
每日一练4——C++计算糖果问题&&进制转换问题
就是一个M%N然后M/N的过程,把余数对应的字符依次尾插到要输出的字符串中,直到M为0就停止,但是并没有完,如果这个数是负数,最后还需要把符号尾插到字符串中,然后逆置字符串,输出该字符串。再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。但是我们知道A - B, B - C, A + B, B + C的结果,这个结果题目是通过输入测试用例给我们的。1.十进制整数转换为二进制整数。原创 2022-11-26 22:37:46 · 205 阅读 · 0 评论 -
每日一练3——C++字符串中找出连续最长的数字串问题&&数组中出现次数超过一半的数字问题
遍历字符串,使用cur去记录连续的数字串,如果遇到不是数字字符,则表示一个连续的数字串结束了,则将数字串跟之前的数字串比较,如果更长,则更新更长的数字串更新到res。众数:就是出现次数超过数组长度一半的那个数字如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数。数组排序后,如果符合条件的数存在,则一定是数组中间那个数。这种方法虽然容易理解,但由于涉及到快排sort,其时间复杂度为O(NlogN)并非最优。原创 2022-11-25 22:28:42 · 322 阅读 · 0 评论 -
每日一练2——C++排序子序列问题&&倒置字符串问题
先创建一个两个string类分别命名为str和temp,用getline把一行输入到str中,然后倒着遍历str,遇到空格就将空格之后的字符串整体尾插到temp中,然后再把刚才空格之后的字符串从str中删去,直到遍历到str的下标为0位置处停止。本题要求解的是排序子序列,排序子序列为非递增或者非递减,非递减就是a[i]a[i+1],非递增就是a[i]>=a[i+1],递增就是a[i]原创 2022-11-24 22:04:34 · 541 阅读 · 0 评论 -
每日一练1——C++删除公共字符问题&&组队竞赛问题
这里我利用C++string类内置函数解题,建立两个string类str1、str2,利用string类特有的find_first_of函数在str1中找到str2中的字符,并返回对应的下标,然后擦除对应位置的字符,然后再从当前位置继续向下查找即可。本题的主要思路是贪心算法,贪心算法其实很简单,就是每次选值时都选当前能看到的局部最优解,所以这里的贪心就是保证每组的第二个值取到能选择的最大值就可以,我们每次尽量取最大,但是最大的数不可能是中位数,所以退而求其次,取每组中第二大的。原创 2022-11-22 22:17:03 · 379 阅读 · 0 评论