分享
分享赚钱 收藏 举报 版权申诉 / 12

类型字节跳动2019笔试(第一批).pdf

  • 上传人:微能四上
  • 文档编号:13777403
  • 上传时间:2022-10-21
  • 格式:PDF
  • 页数:12
  • 大小:196.93KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    字节跳动2019笔试(第一批).pdf
    资源描述:

    1、第一题编程题2 5分:闹钟叫醒去上课时间限制:C/C+ 1秒,其它语言2秒空间限制:C/C+ 3 2 7 6 8 K,其它语言6 5 5 3 6 K6 4 bit IO Format: %lld题目描述:小明总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起来。从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时候起床。输入描述:每个输入包含一个测试用例每个测试用例的第一行包含一个整数,表示闹钟的数量N(N = 1 0 0)接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0 = A 2 4)时Mi(0 = B 6 0)分接下来的

    2、一行包含一个整数,表示从他起床算起他需要X(0 = X = 1 0 0)分钟到达教室接下来的一行包含两个整数,表示上课时间为A(0 = A 2 4)时B(0 = B 6 0)分数据保证至少有一个闹钟可以让牛牛及时到达教室输出描述:输出两个整数表示牛牛最晚起床时间示例1:(输入输出示例仅供调试,后台判题数据一般不包含示例)输入:35 06 07 05 96 5 9输出:6 0思路一:创建一个时间对象,包含Hi和Mi,然后将闹钟时间封装成这个时间对象,然后将这些对象排序(快排时间复杂度为O(nlog2 n)O(nlog_2 n)O(nlog n),然后就简单了,我开始是直接从结尾遍历,找到第一个满

    3、足条件的就输出(条件:闹钟时间+ X =上课时间),然后终止,然而,并没有通过全部样例,清醒一下,想了一下,有序的序列,查找数据明摆着用二分,就是查找一个序列中最右、最接近标杆的,比如一个序列1 , 2 , 3 , 3 , 3 , 4 , 1 0 , 1 0 , 1 1 ,当标杆为3时,我们应该要下标为5的那个3,当标杆为5时,我们应该要下标为6的那个4。AC代码:import java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;public class Main public static void

    4、 main(String args) run();public static void run() Scanner scanner = new Scanner(System.in);int N = scanner.nextInt(); /闹钟数量ArrayList list = new ArrayList();for (int i = 0 ; i N; +i) list.add(new Time(scanner.nextInt(), scanner.nextInt(); /封装成Time对象list.sort(new Comparator() /将闹钟们排序Overridepublic int

    5、 compare(Time o1 , Time o2 ) return o1 .hi - o2 .hi = 0 ? o1 .mi - o2 .mi : o1 .hi - o2 .hi;);int X = scanner.nextInt(), A = scanner.nextInt(), B = scanner.nextInt();Time AB = new Time(A, B); /上课时间AB.jian(X);int l = 0 , r = list.size() - 1 ;while (l 1 ;if (AB.compareTo(list.get(m) = 0 ) l = m + 1 ;

    6、else r = m - 1 ;if (r 0 ) / r可能小于0,因为题目说了保证有解,那就输出第一个闹钟就可以了System.out.println(list.get(0 );elseSystem.out.println(list.get(r);scanner.close();static class Time implements Comparable / Time对象,实现Comparable接口,方便比较int hi;int mi;public Time(int hi, int mi) this.hi = hi;this.mi = mi;public Time jian(int X

    7、) /时间的减法,6时3 0分- 1 0分= 6时2 0分int T = hi * 6 0 + mi;int cha = T - X;hi = cha / 6 0 ;mi = cha % 6 0 ;return this;Overridepublic int compareTo(Time o) return hi - o.hi = 0 ? mi - o.mi : hi - o.hi; /按照小时升序,当小时相同时,按照分钟升序Overridepublic String toString() return hi + + mi;思路二:由于上面创建了很多闹钟对象,比较费空间,所以我们可以将输入的时

    8、间全部转换成分钟,比如6时1 0分=6 *6 0 +1 0 =3 7 0分,然后将输入的时间排序(快排时间复杂度为O(nlog2 n)O(nlog_2 n)O(nlog2 n),然后二分,思路和上面一样。AC代码:import java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;public class Main public static void main(String args) run();public static void run() Scanner scanner = new Scann

    9、er(System.in);int N = scanner.nextInt();ArrayList list = new ArrayList();for (int i = 0 ; i N; +i) list.add(scanner.nextInt() * 6 0 + scanner.nextInt();list.sort(new Comparator() Overridepublic int compare(Integer o1 , Integer o2 ) return o1 - o2 ;);int X = scanner.nextInt();int A = scanner.nextInt(

    10、);int B = scanner.nextInt();int AB = A * 6 0 + B; /上课时间,转换成了分钟int t = AB - X; /这就是标杆int l = 0 , r = list.size() - 1 ;while (l 1 ;if (t = list.get(m) l = m + 1 ; else r = m - 1 ;if (r 0 )System.out.println(list.get(0 ) / 6 0 + + list.get(0 ) % 6 0 );else System.out.println(list.get(r) / 6 0 + + list.

    11、get(r) % 6 0 );scanner.close();第二题编程题2 5分:秘密通信时间限制:C/C+ 1秒,其它语言2秒空间限制:C/C+ 3 2 7 6 8 K,其它语言6 5 5 3 6 K6 4 bit IO Format: %lld题目描述:小明和安琪是好朋友。最近,他们的谈话被一家侦探机构监控,所以他们想将他们的谈话内容进行加密处理。于是,他们发明了一种新的加密方式。每条信息都被编译成二进制数B(明文),其长度为N。然后该信息被写下K次,每次向右移动0,1,.,K-1位。例如:B = 1 0 0 1 0 1 0,K=41 0 0 1 0 1 01 0 0 1 0 1 01

    12、0 0 1 0 1 01 0 0 1 0 1 0然后对每一列进行异或操作,并且把最终所得的结果记录下来,我们将该数称为S(密文)。例如上述例子的结果为:1 1 1 0 1 0 0 1 1 0。最后,将编码的信息S和K发送给安琪。小明已经实现了这种编码的加密过程,但他要求安琪写一个程序去实现这种编码的解密过程,你能帮助安琪实现解密过程吗?输入描述:第一行输入两个整数N和K第二行输入一个二进制字符串S,长度是N + K - 1输出描述:输出明文B示例1:(输入输出示例仅供调试,后台判题数据一般不包含示例)输入:7 41 1 1 0 1 0 0 1 1 0输出:1 0 0 1 0 1 0示例2:(输

    13、入输出示例仅供调试,后台判题数据一般不包含示例)输入:6 21 1 1 0 0 0 1输出:1 0 1 1 1 1备注:1 = N = 1 0 61 = K a = hi = a b = b = i aj = a b c = c = j a bk = a b c d = d = k a b cl = b c d e = e = l b c dm = c d e f = f = m c d en = d e f g = g = n d e f到这里就很简单了,我们把abcdfg分成三部分来看,0,1 k-1,K N-1,因为这三段执行过程是不一样的,我们设int S为输入的0 1数字(对应hij

    14、klmnopq),int res为我们要输出的答案(对应abcdefg):0:res0 = S0 1 k-1:resi = Si res0 resi - 1 K N-1:resi = Si resi + 1 - K resi - 1 实现代码:import java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;public class Main public static void main(String args) run();private static void run1 () Scanner s

    15、canner = new Scanner(System.in);int N = scanner.nextInt();int K = scanner.nextInt();scanner.nextLine();String S = scanner.nextLine();int S_int = new intN + K - 1 ; /将输入的0 1字符串转化为0 1整数数组,方便下面进行异或操作int res = new intN; /输出的结果for (int i = 0 ; i N + K - 1 ; +i) /将输入的0 1字符串转化为0 1整数数组,方便下面进行异或操作S_inti = S.

    16、charAt(i) - 0 ;res0 = S_int0 ; /第一段for (int i = 1 ; i K; +i) /第二段resi = S_inti yihuo(0 , i - 1 , res);for (int i = K; i N; i+) /第三段resi = S_inti yihuo(i + 1 - K, i - 1 , res);for (int i = 0 , len = res.length; i len; +i) System.out.print(resi);System.out.println();scanner.close();private static int

    17、yihuo(int i, int j, int res) /返回从i异或到j的值int result = resi;for (int t = i + 1 ; t = j; t+) result = rest;return result;好了,代码写到这里,jj了,只通过了8 3 .3 3 %测试用例,想了一会,发现求当前异或的时候不必再循环求,而是与上一个异或值有关的,发现规律,还可以优化,比如求c = j a b的时候,b是上一步的结果(b = i a),我们带入这个式子,可得c = j a i a,再化简,可得c = i j,求e = l b c d的时候,将d = k a b c带入:0

    18、:res0 = S0 1 k-1:resi = Si res0 resi - 1 = Si resi - 1 Si - 1 resi - 1 = Si Si - 1 K N-1:resi = Si resi + 1 - K resi - 1 = Si resi - 1 resi - K Si - 1 resi - 1 = Si resi - K Si - 1 AC代码:import java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;public class Main public static vo

    19、id main(String args) run();private static void run() Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();int K = scanner.nextInt();scanner.nextLine();String S = scanner.nextLine();int S_int = new intN + K - 1 ; /将输入的0 1字符串转化为0 1整数数组,方便下面进行异或操作int res = new intN; /输出的结果for (int i = 0 ;

    20、 i N + K - 1 ; +i) /将输入的0 1字符串转化为0 1整数数组,方便下面进行异或操作S_inti = S.charAt(i) - 0 ;res0 = S_int0 ; /第一段for (int i = 1 ; i K; +i) /第二段resi = S_inti - 1 S_inti;for (int i = K; i N; i+) /第三段resi = resi - K S_inti - 1 S_inti;for (int i = 0 , len = res.length; i len; +i) System.out.print(resi);System.out.print

    21、ln();scanner.close();第三题编程题2 5分:万万没想到之抠门的老板时间限制:C/C+ 1秒,其它语言2秒空间限制:C/C+ 3 2 7 6 8 K,其它语言6 5 5 3 6 K6 4 bit IO Format: %lld题目描述:我叫王大锤,是一家互联网公司的老板,快到年底了,要给员工发奖金。真头疼,大环境这么差,怎么才能尽可能的少发点、同时还能让大家怨气少一点呢?公司的座位是排成一排的,每个人都最多打听的到和自己相邻左右两个人的奖金数,我决定这样发:1 .每个人都至少发1 0 0块。2 .论资排辈:每个人加入公司的年限是公开的,如果一个员工A加入公司的时间比领座的同事

    22、B早,那A至少比B多拿1 0 0块。这样,他的心理会平衡一些。我特喵是个天才!将人性理解的如此透彻,做一个小公司的老板真是屈才了。万万没想到,发完奖金,所有员工都离职了,都跳槽去了一家叫字节跳动的公司,他们都说这家公司一不论资排辈,二不吃大锅饭,奖罚分明,激励到位,老板还特大方,说的我都想去应聘了.请听题:给定大锤公司员工的座位表,以及每个员工的入职时间,计算大锤最少需要发多少奖金。输入描述:第一行只有一个正整数N(1 = N = 1 0 0 0),表示员工人数第二行有N个正整数,代表每个员工的入职年限。排列顺序即为员工的座位顺序。输出描述:一个数字,代表大锤最少需要发的奖金总数。示例1:(输

    23、入输出示例仅供调试,后台判题数据一般不包含示例)输入:43 9 2 7输出:6 0 0说明:每人奖金数为(1 0 0,2 0 0,1 0 0,2 0 0)示例2:(输入输出示例仅供调试,后台判题数据一般不包含示例)输入:51 2 3 4 5输出:1 5 0 0说明:每人奖金数为(1 0 0,2 0 0,3 0 0,4 0 0,5 0 0)这个题目的话,直接从左往右遍历,遍历到每个人的时候,再向左向右遍历,向左遍历的时候,如果当前值比右边一个大,则当前值需要取max(后一个值+1 0 0,当前值),如果小于右边的,则停止向左试探;向右也是同理。当然,还有更好的解法,移步leetcode 1 3

    24、5:https:/leetcode- java.util.Arrays;import java.util.Scanner;public class Main public static void main(String args) run();private static void run() Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();int people = new intN;for (int i = 0 ; i N; +i)peoplei = scanner.nextInt();int money

    25、= new intN;Arrays.fill(money, 1 0 0 );for (int i = 0 ; i = 0 ; -j) if (peoplej peoplej + 1 )break;moneyj = Math.max(moneyj + 1 + 1 0 0 , moneyj);for (int j = i + 1 ; j N; +j) if (peoplej peoplej - 1 )break;moneyj = Math.max(moneyj - 1 + 1 0 0 , moneyj);int sum = 0 ;for (int i = 0 ; i N; +i)sum += mo

    26、neyi;System.out.println(sum);scanner.close();第四题编程题2 5分:跑步时间限制:C/C+ 1秒,其它语言2秒空间限制:C/C+ 3 2 7 6 8 K,其它语言6 5 5 3 6 K6 4 bit IO Format: %lld题目描述:小明练习跑步,他家附近的街道是棵树,这棵树上的点按1到n标号,任意两点互相可达,并且有且仅有一条路,每条路的距离都是1,需要在树上找一条路来跑,小明对3很感兴趣,所以他想知道所有跑道距离和%3 =0,1,2的道路总长度一共各有多长。即树上任意两点间距离%3 =k的距离和。输入描述:第一行一个n,点数n =1 e5接

    27、下来n - 1行每行u,v一条无向边输出描述:一行3个整数,分别代表%3 =0,1,2的两点距离的距离和结果取模1 e9 + 7示例1:(输入输出示例仅供调试,后台判题数据一般不包含示例)输入:31 22 3输出:0 2 2说明:长度%3 =0的距离不存在,=1的有两条1 -2,2 -3总长度是2,=2的有1条,1 -3,总长度是2备注:前4个case小数据点数3,1 0,1 0 0,1 0 0 0 0之后数据全部1 0 0 0 0 0个点版权声明:本文为CSDN博主Au-csdn的原创文章,遵循CC 4 .0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https:/ 9 9 8 /article/details/9 9 2 8 5 7 8 6

    展开阅读全文
    提示  微传网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:字节跳动2019笔试(第一批).pdf
    链接地址:https://www.weizhuannet.com/p-13777403.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    微传网用户QQ群:732276833  微博官方号:微传网官方   知乎号:微传网

    Copyright© 2025 微传网 weizhuannet.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号   营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png


    收起
    展开