每日算法练习

此博客用来记录自己在线OJ的练习,

来训练自己的编程和算法能力,

代码都是自己思考编写,

遇到困难的题目会在牛客讨论区查看思路,

杜绝ctrl+c,

因为是练习,所以源代码中缺乏注释

===================分割线========================

    第一天:小易的字典


题目描述:
小易在学校中学习了关于字符串的理论, 于是他基于此完成了一个字典的项目。
小易的这个字典很奇特, 字典内的每个单词都包含n个’a’和m个’z’, 并且所有单词按照字典序排列。
小易现在希望你能帮他找出第k个单词是什么。

输入描述:

输入包括一行三个整数n, m, k(1 <= n, m <= 100, 1 <= k <= 109), 以空格分割。
2 2 6

输出描述:

输出第k个字典中的字符串,如果无解,输出-1。
zzaa
字典中的字符串依次为aazz azaz azza zaaz zaza zzaa

代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day1.cpp

===================分割线========================

    第二天:瞌睡


题目描述:
小易觉得高数课太无聊了,决定睡觉。不过他对课上的一些内容挺感兴趣,所以希望你在老师讲到有趣的部分的时候叫醒他一下。你知道了小易对一堂课每分钟知识点的感兴趣程度,并以分数量化,以及他在这堂课上每分钟是否会睡着,你可以叫醒他一次,这会使得他在接下来的k分钟内保持清醒。你需要选择一种方案最大化小易这堂课听到的知识点分值。

输入描述:

第一行 n, k (1 <= n, k <= 105) ,表示这堂课持续多少分钟,以及叫醒小易一次使他能够保持清醒的时间。
第二行 n 个数,a1, a2, … , an(1 <= ai <= 104) 表示小易对每分钟知识点的感兴趣评分。
第三行 n 个数,t1, t2, … , tn 表示每分钟小易是否清醒, 1表示清醒。
6 3
1 3 5 2 5 4
1 1 0 1 0 0

输出描述:

小易这堂课听到的知识点的最大兴趣值。
16

源代码:(复杂度O(n2)有点高,在线OJ超时)

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day2_O(n2).cpp

===================分割线========================

    第三天:丰收


题目描述:
小易觉得高数课太无聊了,决定睡觉。不过他对课上的一些内容挺感兴趣,所以又到了丰收的季节,恰逢小易去牛牛的果园里游玩。
牛牛常说他对整个果园的每个地方都了如指掌,小易不太相信,所以他想考考牛牛。
在果园里有N堆苹果,每堆苹果的数量为ai,小易希望知道从左往右数第x个苹果是属于哪一堆的。
牛牛觉得这个问题太简单,所以希望你来替他回答。

输入描述:

第一行一个数n(1 <= n <= 105)。
第二行n个数ai(1 <= ai <= 1000),表示从左往右数第i堆有多少苹果
第三行一个数m(1 <= m <= 105),表示有m次询问。
第四行m个数qi,表示小易希望知道第qi个苹果属于哪一堆。
5
2 7 3 4 9
3
1 25 11

输出描述:

m行,第i行输出第qi个苹果属于哪一堆。
1
5
3

源代码:(复杂度O(n),在线OJ超时)

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day3.cpp

===================分割线========================

    第四天:表达式求值


题目描述:
今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如:

1+2*3=7
1*(2+3)=5
1*2*3=6
(1+2)*3=9

现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加"+", “*”, “(”, ")"符号,能够获得的最大值。

输入描述:

一行三个数a,b,c (1 <= a, b, c <= 10)
1 2 3

输出描述:

能够获得的最大值
9

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day4.cpp

===================分割线========================

    第五天:获得最多奖金


题目描述:
小明在越南旅游,参加了当地的娱乐活动。小明运气很好,拿到了大奖, 到了最后的拿奖金环节。小明发现桌子上放着一列红包,每个红包上写着奖金数额。
现在主持人给要求小明在这一列红包之间“切”2刀,将这一列红包“切”成3组,并且第一组的奖金之和等于最后一组奖金和(允许任意一组的红包集合是空)。最终第一组红包的奖金之和就是小明能拿到的总奖金。小明想知道最多能拿到的奖金是多少,你能帮他算算吗。

举例解释:桌子上放了红包 1, 2, 3, 4, 7, 10。小明在“4,7”之间、“7,10” 之间各切一刀,将红包分成3组 [1, 2, 3, 4] [7] [10],其中第一组奖金之和=第三组奖金之和=10,所以小明可以拿到10越南盾。


输入描述:

第一行包含一个正整数n,(1<=n<= 200 000),表示有多少个红包。
第二行包含n个正整数d[i],表示每个红包包含的奖金数额。其中1<= d[i] <= 1000 000 000
5
1 3 1 1 4

输出描述:

小明可以拿到的总奖金
5

说明:

[1,3,1] [ ] [1,4] ,其中第一组奖金和是5,等于第三组奖金和。所以小明可以拿到5越南盾

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day5.cpp

===================分割线========================

    第六天,两题


第一题:

题目描述:
牛牛举办了一-次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平
值a_ i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发
现队伍的水平值等于该队伍队员中第二高水平值。

例如:
一一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
为为让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。
如样例所示:

如果牛牛把6个队员划分到两个队伍
如果方案为:
team1:{1,2,5}, team2:{5,5,8},这时候水平值总和为7.
而如果方案为:
team1:{2,5,8}, team2:1,5,5},这时候水平值总和为10.
没有比总和为10更大的方案,所以输出10.

输入描述:

输入的第一行为一个正整数n(1≤n≤10^5)
第二行包括3*n个整数a_ i(1≤a_ _i≤10^9),表示每个参赛选手的水
平值.

5 2 8 51 5

输出描述:

输出一个整数表示所有队伍的水平值总和最大值.
10

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day6(1).cpp




第二题:


题目描述:

输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。 例
如,输入"They are students.“和"aeiou”, 则删除之后的第一 个字符串变
成"Thy r stdnts."



输入描述:

每个测试输入包含2个字符串
They are students .
aeiou

输出描述:

输出删除后的字符串
Thy r stdnts .

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day6(2).cpp

===================分割线========================

    第七天,两题


第一题:


题目描述:

牛牛定义排序子序列为一个数组中-段连续的子序列,并且这段子序列是非
递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任
务是把数组A分为若干段排序子序列牛牛想知道他最少可以把这个数组分
为几段排序子序列.
如样例所示牛牛可以把数组A划分为[1 ,2,3]和[2,2, 1]两个排序子序列,至少需
要划分为2个排序子序列,所以输出2

输入描述:

输入的第一行为一个正整数n(1≤n≤10^5)
第二行包括n个整数A_ i(1≤A _i≤10^9),表示数组A的每个数字。
6
12322 1

输出描述:

输出一个整数表示牛牛可以将A最少划分为多少段排序子序列

2

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day7.cpp



第二题:

题目描述:
将一句话的单词进行倒置,标点不倒置 。比如I like bejing.经过函数后变
为: beiing. like 1

输入描述:

每个测试输入包含1个测试用例: I like beijing.输入用例长度不
超过100

I like beijing.

输出描述:

依次输出倒置之后的字符串,以空格分割

beijing. like I

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day7(2).cpp

===================分割线========================

    第八天


第一题:


题目描述:

输入一段含有数字字符的字符串,字符串长度小于255,找到字符串中,数字字符串最长的,并将其照原样输出,例如:abc123defg123456789,
输出最大的数字字符串:123456789

输入描述:

输入一段带数字的字符串,长度小于255

abc123defg123456789

输出描述:

输出长度最大的数字字符串

123456789

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day8_1.cpp

===================分割线========================

    第九天,两题


第一题:


题目描述:

给定一个十进制数M,以及需要转换的进制数N。将+进制数M转化为N进
制数

输入描述:

输入为一行,M(32位整数)、N(2≤N≤16),以空格隔开。

7 2

输出描述:

为每个测试实例输出转换后的数,每个输出占- -行。如果N大于9,则对
应的数字规则参考16进制(比如,10用A表示,等等)

111

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day9_1cpp.cpp



第二题:

题目描述:
A,B,C三个人是好朋友每个人手里都有一些糖果 我们不知道他们每个人手
上具体有多少个糖果,但是我们知道以下的信息:
A-B, B-C,A+B,B + C.这四个数值每个字母代表每个人所拥有的糖果
数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保
证最多只有一组整数A,B,C满足所有题设条件。

输入描述:

输入为一行,一共4个整数,分别为A- B,B-C,A+B,B+C,
用空格隔开。范围均在-30到30之 间(闭区间)。

1-2 3 4

输出描述:

输出为-行,如果存在满足的整数A,B,c则按顺序输出A,B, C,用空
格隔开,行末无空格。如果不存在这样的整数A, B, C,则输出No

2 1 3

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day9_2.cpp

===================分割线========================

    第十天,两题



第一题:连续最大和


题目描述:

一个数组有N个元素,求连续子数组的最大和。例如: [-1,2,1] ,和最大的连续子数组为[2,1] ,其和为3

输入描述:

输入为两行。第-行一个整数n(1 <= n <= 100000) ,表示一共有n个元素第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。

3 -1 2 1

输出描述:

所有连续子数组中和最大的值。

3

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day10_1.cpp



第二题:统计回文


题目描述:

一个数组有N个元素,求连续子数组的最大和。例如: [-1,2,1] ,和最大的连续子数组为[2,1] ,其和为3

“回文串”是一个正读和反读都- -样的字符串 ,比如"level"或者“noon"等等就是回文串。花花非常喜欢这种拥有
对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符
串B插入字符串A使产生的字符串是一个回文串。 你接受花花的请求,帮助她寻找有多少种插入办法可以使新
串是一个回文串。如果字符串B插入的位置不同就考虑为不一-样的办法。

例如:
A=“aba", B= “b”。这里有4种把B插入A的办法:
在A的第一个字母之前: "baba"不是回文
在第一个字母’a’之后: "abba"是回文
"在字母’b’之后: "abba"是回文
在第二个字母’a’之后"abab"不是回文
所以满足条件的答案为2


输入描述:

每组输入数据共两行。
第一行为字符串A
第二行为字符串B
字符串长度均小于100且只包含小写字母。

aba
b

输出描述:

输出一个数字,表示把字符串B插入字符串A之后构成一-个回文串的方法数

2

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day10_2.cpp

===================分割线========================

    第十一天,两题



第一题:不要二

链接:https://www.nowcoder.com/practice/1183548cd48446b38da501e58d5944eb?tpId=85&&tqId=2
9840&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking

题目描述:

二货小易有一个W*H的网格盒子,网格的行编号为0H-1,网格的列编号为0W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。

输入描述:

每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)

3 2

输出描述:

输出一个最多可以放的蛋糕数

4

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day11_1.cpp

第二题:字符串转整型

链接:https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&&tqId=11202&rp
=6&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking



题目描述:

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

输入描述:

输入一个字符串,包括数字字母符号,可以为空

+2147483647
1a33

输出描述:

如果是合法的数值表达则返回该数字,否则返回0

2147483647
0

源代码:

https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day11_2.cpp

===================分割线========================

    第十二天,两题



第一题:不要二

链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66?tpId=85&&tqId=29846&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking


题目描述:

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

输入描述:

输入为一个正整数N(1 ≤ N ≤ 1,000,000)

15

输出描述:

输出一个最小的步数变为Fibonacci数"

2

源代码:https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day12_1.cpp



第二题:合法括号序列判断

链接:https://www.nowcoder.com/practice/d8acfa0619814b2d98f12c071aef20d4?tpId=8&&tqId=11039&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking


题目描述:

对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。

输入描述:

“()a()()”,7
“(()())”,6

输出描述:

false

true

源代码:https://github.com/akh5/C-/blob/master/%E6%AF%8F%E6%97%A5%E7%AE%97%E6%B3%95/day12_2.cpp

发布了52 篇原创文章 · 获赞 13 · 访问量 5458

猜你喜欢

转载自blog.csdn.net/MPF1230/article/details/102747885