【求职】字节跳动 2018 校招后端方向(第三批)
编程题
1.附加题-魔方
二阶魔方又叫小魔方,是 222 的立方形结构。每一面都有 4 个块,共有 24 个块。每次操作可以将任意一面逆时针或者顺时针旋转 90°,如将上面逆时针旋转 90°操作如下。
魔方展开后每一块的序号如下图:
输入:
输入一行包含24个数字,按序号顺序给出魔方每一块上面的数字。所有数大小范围为[-100,100]。
输出描述:
输出一行包含一个数字,表示最大优美度。
输入例子1:
2-3-237-6-6-79-5-9-3-214-9-1-10-5-5-10-482
输出例子1:
8281
推箱子的游戏
2.有一个推箱子的游戏,一开始的情况如下图:
上图中,’.‘表示可到达的位置,’#‘表示不可到达的位置,其中S表示你起始的位置,0表示初始箱子的位置,E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧,将箱子向另一侧推动。如下图将箱子向右推动一格;
…S0…->…S0.
注意不能将箱子推动到’#'上,也不能将箱子推出边界;
现在,给你游戏的初始样子,你需要输出最少几步能够完成游戏,如果不能完成,则输出-1。
输入描述:
第一行为2个数字,n,m,表示游戏盘面大小有n行m列(5<n,m<50);后面为n行字符串,每行字符串有m字符,表示游戏盘面;
输出描述:
一个数字,表示最少几步能完成游戏,如果不能,输出-1;
输入例子1:
36
.S#…E .#.0…
…
输出例子1:
11
3.房间
3.有n个房间,现在i号房间里的人需要被重新分配,分配的规则是这样的:先让i号房间里的人全都出来,接下来按照i+1,i+2,i+3,…的顺序依此往这些房间里放一个人,n号房间的的下一个房间是1号房间,直到所有的人都被重新分配。
现在告诉你分配完后每个房间的人数以及最后一个人被分配的房间号x,你需要求出分配前每个房间的人数。数据
保证一定有解,若有多解输出任意一个解。
输入描述:
第一行两个整数n,x(2<=n<=105,1<=x<=n),代表房间房间数量以及最后一个人被分配的房间号;第二行n个整数a_i(0<=a_i<=109),代表每个房间分配后的人数。
输出描述:
输出n个整数,代表每个房间分配前的人数。
输入例子1:
31
651
输出例子1:
444
二、问答题
1.题目描述-矩阵
以下函数用于找到整数矩阵matrix中,元素之和最大的n行m列的子矩阵的元素之和。请指出程序代码中错误的地方(问题不止一处,请尽量找出所有你认为错误的地方),并在不新增代码行的情况下将问题修复。
int maxSubmatrixSum(std::vectorstd::vector matrix,
int n, int m) {
int base_sum;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
base_sum += matrixi;
}
}
int result = 0;
for (int i = 0; i + n < matrix.size(); i++) {
if(i > 0){
for (int y = 0; y < m; y++){
base_sum += matrixi + n - matrixi - 1;
}
}
int real_sum = base_sum;
if (real_sum > result) {
result = real_sum;
}
for (int j = 0; j + m < matrix.size(); j++) {
for (int x = 0; x < n; x++) {
real_sum += matrixx - matrixx;
}
if (real_sum > result) {
result = real_sum;
}
}
}
return result;
}
2.题目描述-服务器存储
在生产环境,我们常常要存储一些像服务参数、功能开关之类的键值。传统的做法是把配置都写到文件里,然后同步到线上每台机器上。随着机器变多,配置文件变得难以管理,并且容易出现不一致的情况。我们希望设计一个配置服务来解决这个问题。
统一配置服务可能会存在以下问题:由于是非常核心的服务,如果存在单节点问题对服务可用性影响非常大;线上可能读取非常频繁,尽可能提供高性能的服务同时,也要考虑横向扩容能力;需要保证配置在期望的时间内下发与更新;
请设计一个存储服务,包含但不限于以下角色:服务端(可能由多个节点组成),客户端(读取、写入一个配
置),其他(如旁路的监控等);
系统假设:
1、存储量都在1GB以内,单机内存可以存储下;
2、每秒写入在1000以内
3、每秒读取在1000000以上
4、使用尽量少的节点
5、无论什么时候,服务总是可以读写
6、允许故障期间读到老的配置数据
7、故障恢复后,数据保持同步