腾讯音乐娱乐数据分析4.15笔试

腾讯音乐娱乐数据分析4.15笔试凉经

本人很菜,目前也在纠结要不要走数据分析方向,纠结之下还是参加了这次笔试,希望受到打击会更努力一些~也希望通过分享,能收获好运气~

笔试时间一个半小时,总共三道题,在牛客网上进行,建议提前十五分钟点开链接,需要开启摄像头、屏幕共享权限,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

猜你喜欢

转载自blog.csdn.net/jojojuejue/article/details/115769017
今日推荐