某知名大厂2021春招Java工程师编程题

第一题

题目描述

牛牛回到家要走恰好n个台阶。
由于牛牛步伐不太大,故单步只能跨最多m个台阶,最少跨一个台阶。
牛牛有一个奇怪的习惯,他要求每步和之前两步走的台阶数目不能相同。
牛牛想知道有多少种不同的走法,答案对109 + 7取模。
输入描述:
一行输入两个整数n,m,表示台阶数目,单步跨越的最多台阶数目。
对于30%的数据有m≤n≤5。
对于60%的数据有n≤300。
对于100%的数据有1≤n≤100000,2< m≤7。
输出描述:
一行一个整数,表示答案。
示例
输入
7 3
输出
2
说明
合法的走法仅有: (1,2,3,1), (1,3,2,1)。
比如(1,2,1,3)在第三步非法。

第二题

题目描述

牛牛有一个长度为n的数组,牛妹给出m个询问,询问有2种类型:
1 l r:询问区间[1, r]内有多少子序列的乘积为奇数
2 l r:询问区间[1, r]内有多少子序列的乘积为偶数
某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。
输入描述:
第一行2个整数n, m,表示数组长度和询问个数。
接下来一行给出n个空格隔开的数。
接下来m行每行三个整数表示操作类型。
1≤l≤r≤n,m≤2* 105。
输出描述:
输出m行,每行表示对应询问的答案,因为答案可能很大,输出对109 + 7取模
的结果。
示例
输入
4 2
1 2 3 4
1 1 3
2 1 3
输出
3
4
说明
第一个询问中合法的子序列为:{1},{3},{1,3}。第二个询问中合法的子序列为: {2}, {1,2}, {2,3}, {1,2,3}

第三题

题目描述
牛牛很喜欢在数字序列中跳跃
现在他正站在1号位置,每次跳跃,他可以向后跳一步(即从i跳到i+1), 也可以跳到该位置往后的任意一个与该位置上的数字相同的位置,请问他最少需要跳多少步才能跳到N号位置?
输入描述:
第一行输入一个整数N,表示数字序列的长度
接下来一行为一个仅由数字0-9构成的数字串
输出描述:
输出一个整数表示答案
示例1
输入
5
01212
输出
3
说明
按照1->2->3->5的顺序跳
示例2
输入
5
21202
输出
1
说明
从第一个2直接跳到最后一个2即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值