本人很菜,目前也在纠结要不要走数据分析方向,纠结之下还是参加了这次笔试,希望受到打击会更努力一些~也希望通过分享,能收获好运气~
笔试时间一个半小时,总共三道题,在牛客网上进行,建议提前十五分钟点开链接,需要开启摄像头、屏幕共享权限,MAC还需要到设置里打开,重启浏览器,第一次操作还是提前准备。还需要手机扫码,进入笔试小程序界面,防作弊~也可以选没有手机这个选项,哈哈哈哈哈我觉得太假了就还是扫码了。
第一题
出题的时候会一大段描述,牛牛和他的伙伴的故事~
抓重点:
1.输入描述
-
第一行输入有几组数据需要判断
-
后续每组数据分两行输入
- 第一行:输入有几个数字
- 第二行:输入具体数字内容
2.输出描述
对每组数据输出只出现过一次的最小的数字,若没有则输出-1
3.示例
-
输入:
2
3
6 6 6
3
6 9 6 -
输出:
-1
9
4.分析:计数,统计只出现一次的最小的
if __name__ == "__main__":
n = int(input()) #读取第一行组数n
for i in range(n):
n1 = int(input()) #读取数组长度数据
line = input().split(' ')
value = list(map(int, line)) #把输出转为int类型
count_dict = {} #用字典计数,key为值,value为该值出现次数
for j in value:
count_dict[j] = count_dict.setdefault(j,0)+1
temp = 0
once_list = []
for key in count_dict.keys():
if count_dict[key] == 1 :
temp = 1
once_list.append(key)
if temp == 0:
print(-1)
else:
print(min(once_list))
这题比较简单,但是最近没刷题,没做好准备,浪费了一些时间,这是唯一一道全通过的题。
第二题
1.输入描述
- 第一行输入数组长度
- 第二行输入数组a
- 第三行输入数组b ( b i b_i bi表示 a i + 1 a_i+1 ai+1的代价)
2.输出描述
输出使得数组a中数字完全不同时的最小代价。
3.示例
-
输入:
5
1 2 3 4 5
1 1 1 1 1 -
输出:
0
解析:a中数字开始就完全不同代价为0
-
输入:
3
1 1 2
4 6 3 -
输出:
7
解析
1和1相同,选择代价为4的数字1+1,数组变为 2,1,2,还有相同的,进一步选择代价为3的数字2+1,数组变为2,1,3,最小代价为4+3=7
4.分析:递归求解,每次找到最小的重复数字中代价最小的进行+1运算
def min_dup_cost(a,b,cost):
n = len(a)
count_list = {} #计数字典
for i in a:
count_list[i] = count_list.setdefault(i,0)+1
dup_list = [ ] #记录重复的数字为列表
temp = 0 #看是否有重复的
for i in count_list.keys():
if count_list[i] > 1:
dup_list.append(i)
temp = 1
if temp == 0:
cost = temp + cost
return cost
else:
min_dup = min(dup_list)
min_cost = max(b) # 设定初始最大的b
for i in range(n):
if a[i] == min_dup and b[i] <= min_cost:
min_i = i
min_cost = b[i]
cost = cost + min_cost #
for i in range(n):
if i == min_i:
a[i] = a[i] + 1
return min_dup_cost(a,b,cost)
if __name__ == "__main__":
n = int(input()) #读取第一行组数n
line_a = input().split(' ') #读取数组a
a = list(map(int, line_a)) #把输入转为int类型
line_b = input().split(' ') #读取数组a
b = list(map(int, line_b)) #把输入转为int类型
print(min_dup_cost(a,b,0))
测试了几个例子是可以通过的,但是昨天做的时候没有通过全部样例。。。。
也请大家帮忙找找错误和要改进的
第三题
没读懂题目,简直太菜了,回忆一下题目吧~
1.输入描述
- 第一行输入树节点个数
- 第二行输入(不理解,只记得例子)
2.输出描述
不理解,只记得例子
3.示例
-
输入:
5
4 1 1 4 -
输出:
8
解析:定义两个节点a, b的最短距离是a到b所需要经过的边个数
(不理解和输入之间的联系)
(不理解3,2,5怎么挑出来的)
3与2的最短距离是:3
3与5的最短距离是:3
2与5的最短距离是:2
所以输出:8