字节跳动笔试-算法岗(2019/07/31)

摘要

本文章介绍的字节跳动2019年的笔试过程回忆,本次笔试分为两个考题,因为面试的算法岗,所以笔试都为编程题。

代码可选,c/c++/java/python 等

内容包括如下:

  • 第一道题,关于排序
  • 第二道题关于发牌

本人第一次参加这种刷题,可能代码比较乱,但是功能都已实现,仅供参考,谢谢批评指正

  • [x] Edit By Porter, 积水成渊,蛟龙生焉。

字节跳动笔试(2019/07/31)

字节跳动笔试题目回忆

第一道题,对一串数据进行排序

  • 比如给一串数: [-1, 3, 2, 4, 5, -6, -7, -9],

  • 输出为:[3, -1, 2, -6, -4, -9, 5, 7]

题目要求:

我们输入一串数据后, 我们能够对其排序,开始第一个是正数,后面的是正数和负数交替穿插,要求排序后的正负数排列顺序不能改变

实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#coding=utf-8

import sys

def sort(n):
n_p = [] # 正数
n_n = []
sort_resut = []
count = 0
for i in n:
if i >= 0:
n_p.append(i)
else:
n_n.append(i)
if n[0] >= 0:
flag_flip = 1 # 正数
else:
flag_flip = 0 # 负数

for i_num in range(len(n)):
if i_num < len(n_p):
sort_resut.append(n_p[i_num])
if i_num < len(n_n):
sort_resut.append(n_n[i_num])
return sort_resut

if __name__ == "__main__":

'''
zjtd 第一题
'''
for line in sys.stdin:
n_input = line.split()
n_input = list(map(int, n_input))
sort_resut = sort(n_input)
print(sort_resut)

第一题

第二道题,对发牌进行推算原来的牌的顺序

  • 手上一碟牌(从上往下堆叠)
  • 第一步,先发最上一张牌到桌子上
  • 第二步,从手中剩下的一叠牌中,最上面的一张放到手上一叠牌的最下面
  • 反复第一第二步骤进行发牌到桌子上也是从上到下堆成一叠
  • 直到牌发完

题目要求:

需要输入两个参数:

  • 输入行数n,代表你将要把整个数据分几行输入
  • 发牌的数据,分成n行输入
  • 能正确推算出手上原来出牌的顺序

示例:

手中一碟牌按照如上要求发完叠到桌子上

桌子上的从上到下牌为:[4, 2, 3, 1]

请推算原来手上的牌从上到下的顺序:

举例输入参数n=2

牌的数据为[4, 2, 3, 1]

所以输入终端应该下面代码操作所示。

计算结果为:[1, 2, 3, 4]

实现代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#coding=utf-8

import sys

def sortresult(pai_list = [4, 2, 3, 1]):

list_result = []
while (True):
list_len = len(pai_list)
# list_len_j = int(list_len)
for j in range(list_len):
num_j = j * 2

if list_len - num_j - 1 >= 0:
list_result.append(pai_list[list_len - num_j - 1])
else:
break
# print("ff:", pai_list)
number = []
for i in range(list_len):
num_j = i * 2
if list_len - num_j - 1 >= 0:
number.append(list_len - num_j - 1)
else:
break
# print("ff:index", number, 'list:', pai_list)
for del_index in number:
pai_list.pop(del_index)

if list_len <= 1:
break
return list_result




if __name__ == "__main__":
'''
zjtd 第二题
'''
pai_list = []
n = input()
for i in range(int(n)):
line = sys.stdin.readline().strip().split(' ')
for li in range(0, len(line)):
values = line[li]
values = int(values)
pai_list.append(values)

list_result = sortresult(pai_list)
print("result:", list_result)

第二题

文章目录
  1. 1. 摘要
  2. 2. 字节跳动笔试(2019/07/31)
    1. 2.1. 第一道题,对一串数据进行排序
      1. 2.1.1. 题目要求:
      2. 2.1.2. 实现代码如下:
    2. 2.2. 第二道题,对发牌进行推算原来的牌的顺序
      1. 2.2.1. 题目要求:
      2. 2.2.2. 示例:
      3. 2.2.3. 实现代码为:
|