算法题目
文章平均质量分 55
小 琛
你什么都没有,却还为我的梦加油
展开
-
牛客——有一个仅包含’a’和’b’两种字符的字符串s
有一个仅包含’a’和’b’两种字符的字符串s,长度为n,每次操作可以把一个字符做一次转换(把一个’a’设置为’b’,或者把一个’b’置成’a’);但是操作的次数有上限m,问在有限的操作数范围内,能够得到最大连续的相同字符的子串的长度是多少。输入描述:第一行两个整数 n , m (1<=m<=n<=50000),第二行为长度为n且只包含’a’和’b’的字符串s。输出描述:输出在操作次数不超过 m 的情况下,能够得到的 最大连续 全’a’子串或全’b’子串的长度。示例1输入:8.原创 2021-09-03 15:46:49 · 2274 阅读 · 2 评论 -
笔试题——约瑟夫环
引言:笔试遇到了类似题目,搜了搜网上的讲解,要么有问题要么不清晰,索性自己来。从研究到实现!!!题目描述:给定一个从1到n的整数列表,从第一个数字开始计数,遇到3的倍数时,将该数从列表中删除,直至列表末尾。在剩下的数字中,从第一个数字开始,继续之前的计数值,同样遇到3的倍数时,删除该数。循环上面的步骤,直到列表中只剩下一个数字。根据指定的数字n,来判断最后剩下的数字是哪个。输入描述输入:n=5过程:第一步:1,2,(3).4.5第二步:(1),2,4,(5)第三步:(2).4.原创 2021-09-02 16:29:49 · 357 阅读 · 0 评论 -
取模运算的总结
转自:HyperDai原文链接编程竞赛有相当一部分题目的结果过于庞大,整数类型无法存储,往往只要求输出取模的结果。例如(a+b)%p,若a+b的结果我们存储不了,再去取模,结果显然不对,我们为了防止溢出,可以先分别对a取模,b取模,再求和,输出的结果相同。a mod b表示a除以b的余数。有下面的公式:(a + b) % p = (a%p + b%p) %p(a - b) % p = ((a%p - b%p) + p) %p(a * b) % p = (a%p)*(b%p) %p注意转载 2021-09-01 14:54:08 · 1034 阅读 · 0 评论 -
2021年校招笔试题——英语单词排序
士大夫原创 2021-08-30 19:39:09 · 406 阅读 · 0 评论 -
2021笔试题——牛牛喜欢数字序列跳跃
作者:小 琛欢迎转载,请标明出处牛牛很喜欢在数字序列中跳跃现在他正站在1号位置,每次跳跃,他可以向后跳一步(即从跳到+1),也可以跳到该位置往后的任意一个与该位置上的数字相间的位置例如:1,2,3,4,1 ,3,4,1 在第一个1的位置时,既可以跳一个,也可以跳到后面任意一个1的位置请问他最少需要跳多少步才能跳到N号位?输入描述:一个数字序列输出描述:最少步数题目解答:思路为动态规划+哈希对于某一个位置F[i]而言,到达该位置的步数只有两种情况:第一种,F[i]=F[i-1]原创 2021-03-18 20:11:31 · 1680 阅读 · 3 评论 -
2021年面试题——数数问题
作者:小 琛欢迎转载,请标明出处该博文讲述2021年美团春招原题,数数题目描述:小美正在统计她公司的数据。她想要知道一定时间段内的某种特征。因此,她将n条数据按时间排好序依次给出,想要知道以某条数据开始的一个连续数据段内数据的众数情况。形式化地,始出n个数a1…an分别表示时刻1,2…-.n的数据值。小美想要知道连读X条数据的情况,即a… +K-1。请你求出当i=1,2.n-K+1时,aL…3+K-1这些数据中的"众数"。如果"众数"有多个,输出最小的那一个.注意,此处“众数的定义与通常定原创 2021-03-14 12:33:03 · 868 阅读 · 2 评论 -
2021年面试题——完美子串的数量
作者:小 琛欢迎转载,请标明出处这是笔者参加腾讯面试的一道真题,需要用到的知识点很多,是一道可以区别档次的题目,故而总结并分享如下题目描述:完美子串的数量如果一个字符串的子串包含了该字符串中所有出现过的字符,这样的子串我们把它称作原字符串的完美子串。比如,对于字符串“abcdabcabc”,子串 “abcd”,“bcda”,“abcdabcabc”……,都是它的完美子串。给定一个只包含小写英文字符的字符串,请求出它的完美子串的个数。题目分析:在遇到类似的求最长字符、最短字符、满足原创 2021-03-10 19:27:44 · 912 阅读 · 0 评论 -
算法题目——编辑距离(动态规划天花板级别题目)
作者:小 琛欢迎转载,请标明出处编辑距离这道题目,是动态规划比较接近顶端一道题,笔者我面试中遇到后,并没有成功做出来,故而写这样一篇解析文章,希望能帮助看到的你题目描述:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将原创 2021-03-07 16:55:21 · 192 阅读 · 1 评论 -
算法题目——最长回文字符串(经典动态规划题目)
作者:小 琛欢迎转载,请标明出处题目描述:给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”题目解析与解答:该题是一道经典的动态规划题目,难度属于中上,但按照动态规划解决步骤可顺利完成确定问题。寻找最长回文字符串F(n)枚举几个例子帮原创 2021-03-07 13:50:22 · 319 阅读 · 0 评论 -
算法学习——动态规划的学习
作者:小 琛欢迎转载,请标明出处引言:动态规划是算法中较难的内容,常常被用来区分学习者的档次,笔者也是在面试中发现了这个问题,故而回头认真学习并总结递归算法,希望能够帮助到阅读的你文章目录动态规划的思想动态规划的具体实现步骤入门级别的两个例子斐波那契数列变态跳台阶问题动归的难点,当分析复杂化经典题目1、string break经典题目2、三角形最小路径和动态规划的思想“世界上的所有问题,都可以化繁为简,化简为空”。这种思想本事就是一门艺术,就像写代码的我们,同样在做一门艺术。1. 动归从某原创 2021-03-07 12:28:14 · 283 阅读 · 0 评论 -
算法题目——旋转图像(给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度)
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]解答:另辟蹊径,用翻转代替旋转,仔细观察旋转前后,假设我们先将需要旋转的数组进行上下翻转,得到[[3,2,1],[6,5,4][9,8,7].原创 2020-12-28 20:46:52 · 1707 阅读 · 0 评论 -
对字符串中的所有单词进行倒排。
作者:小 琛欢迎转载,请标明出处题目说明:1、构成单词的字符只有26个大写或小写英文字母;2、非构成单词的字符均视为单词间隔符;3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;4、每个单词最长20个字母;输入描述:输入一行以空格来分隔的句子输出描述:输出句子的逆序示例1输入I//am??a\student输出student a am I解析对于我们来说,有效的字符就是从‘A’~‘z’,当非有效字符原创 2020-07-23 19:41:59 · 1076 阅读 · 0 评论 -
变态跳台阶
作者:小 琛欢迎转载,请标明出处题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析递归思想求解。一共n个台阶,恒有一种跳法即一次跳n个。当台阶只有1个的时候,结果为1除去第一种情况,则第一次跳有一次跳1,2,3…n-1,在第一次跳了之后,对于剩余的台阶数,亦有同样的跳法:恒有1种、第一次跳有1,2,3…因此:f(n)=f(1)+f(2)+f(3)…f(n-1)+1例如f(3)=f(1)+f(2)+1。代码int原创 2020-06-30 23:02:44 · 107 阅读 · 0 评论 -
树根问题
作者:小 琛欢迎转载,请标明出处题目描述数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。比如,对于24 来说,把2 和4 相加得到6,由于6 是一位数,因此6 是24 的数根。再比如39,把3 和9 加起来得到12,由于12 不是一位数,因此还得把1 和2 加起来,最后得到3,这是一个一位数,因此3 是39 的数根。现在给你一个正整数,输出它的数根。输入描原创 2020-06-29 16:05:35 · 650 阅读 · 0 评论 -
通配字符串问题
作者:小 琛欢迎转载,请标明出处题目在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。要求:实现如下2个通配符:“ * ”:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)“?”:匹配1个字符输入:te?t*.*txtt222.xls输出:true解答#include <iostream>#include <string>#include <assert.h&原创 2020-06-22 15:54:33 · 250 阅读 · 0 评论 -
华为经典面试题:扑克牌大小
作者:小 琛欢迎转载,请标明出处该博文讲述一道非常好的题目,华为的笔试题:扑克牌大小题目描述扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER输入两手牌,两手牌之间用"-“连接,每手牌的每张牌以空格分隔,”-"两边没有空格,如:4 4 4 4-joker JOKER。请比较两手牌大小,原创 2020-06-18 21:19:12 · 1714 阅读 · 0 评论 -
在命令行输入如下命令: -》解析命令
作者:小 琛欢迎转载,请标明出处在命令行输入如下命令:xcopy /s c:\ d:\,各个参数如下:参数1:命令字xcopy参数2:字符串/s参数3:字符串c:参数4: 字符串d:\请编写一个参数解析程序,实现将命令行各个参数解析出来。解析规则:1.参数分隔符为空格2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d:\”时,参数仍然是4个,第3个参数应该是字符串C:\program fil原创 2020-06-15 21:18:58 · 913 阅读 · 0 评论 -
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,求差值最小的一组
作者:小 琛欢迎转载,请标明出处任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对输入描述:输入一个偶数输出描述:输出两个素数示例1输入:20输出:7 13思路分析分为几个模块编写,首先写一个函数实现判断该数是否为素数。从该数的中间数开始查找,定义两个临时变量,一个向该数的左(小)方向,一个向该数的右(大)方向,每次让两个变量加一和减一(保证和为该数),当第一组满足两个数都为素数时,即为答案int原创 2020-06-15 10:59:52 · 3388 阅读 · 1 评论 -
不使用算数运算符,实现两个数的相加
作者:小 琛欢迎转载,请标明出处题目描述:不允许使用任何的算术运算符,例如+,-等,实现两个数的相加解析:首先要明白,在算术运算符不可用的情况下,我们要解决这个问题,就必须用逻辑运算符或者说位运算符。对于计算机来说,运算都是建立于二进制,因此我们在思考的时候,要以二进制的思想为根本。拆分加法的本质,例如11+9,转换为二进制加则为1011 + 1001。实际上就是进行两个步骤:加和进位。(1)加则是将每个位进行相加,对于0与1的组合直接加,可以用异或来实现。(2)而对于进位,则是1与1的原创 2020-06-11 09:14:41 · 829 阅读 · 0 评论 -
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能
作者:小 琛欢迎转载,请标明出处题目:将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。解题思路:解题思路:巧妙运用ASCLL码的码值,再针对开始位的符号进行合理判断#include <iostream>#include <string>using namespace std;//将一个字符串转换成一个整数原创 2020-06-08 16:07:34 · 524 阅读 · 0 评论 -
输入一个十进制的数num和一个需要转换的进制M,将该数转换为M进制并输出
作者:小 琛欢迎转载,请标明出处题目:输入一个十进制的数num和一个需要转换的M进制的值,将该数转换为M进制并输出。例如输入 10 2 ->1010解题思路:将一个数转换为M进制,则就是将该数除以M取余,直到商为0。题目的难点在于对十进制以上情况的转换,此时加入了A,B,C,D,E,F。我们其实可以转换思维,并不是非要以整形的方式去输出,可以利用字符串解决。即定义一个数组,每个下标对应其内容,char arr[] = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6原创 2020-06-05 09:27:36 · 525 阅读 · 0 评论 -
输入一个数组,若数组中有某数个数大于数组大小的一半,则得到该数,若无返回0
作者:小 琛欢迎转载,请标明出处题目:输入一个数组,若数组中有某数个数大于数组大小的一半,则得到该数,若无返回0。例如int arr[]={0,1,2,2,2,2,3}; 2的数量大于数组大小一半,返回2。题目分析:如果有满足条件的数,该数在排序后一定是中位数,可以先排序,后找中位数,再判断是否满足size_t majorityElement(const std::vector<int>& nums){ std::vector<int> v(nums); st原创 2020-06-04 09:09:23 · 237 阅读 · 0 评论 -
将一句话进行倒置,标点不倒置。
作者:小 琛欢迎转载,请标明出处题目:将一句话进行倒置,标点不倒置。例如:I like bejing. -> bejing. like I分析:这道题目和简单得倒置有所不同,并不是单纯得所有内容颠倒,而是要保持每个单词不变,仅仅将单词的次序倒置。解题思路:将问题简单化,要完成该要求,可以先将所有的内容倒置,接着将每个单词再倒置,即可完成要求#include <iostream>#include <string>//将一句话进行倒置,标点不倒置。例如:I原创 2020-06-02 11:59:31 · 347 阅读 · 0 评论 -
输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符
作者:小 琛欢迎转载,请标明出处题目:输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符例如,输入str1为“ They are students.” 和str2为 “aeiou”, 则删除之后的第一个字符串变为“Thy r stdnts.”题目分析:如果使用最简单多次遍历法,会导致时间复杂度极高,算法不够优化.这里可以采用空间换时间的方法。定义一个数组,大小为256(char类型的字符为0-255),arr[256]全部初始化为0。遍历str2,将每个字符以ASSCLL码值来对应原创 2020-06-01 16:22:58 · 5534 阅读 · 2 评论