4月20日人寿研发中心笔试

一、10道计算机基础知识

  1. 已知前序遍历,下列四个选项中哪个中序遍历不可能出现
    前、中、后指的是根节点出现的顺序
  2. 方法重载
    一个类中,可以定义多个函数,这些函数的名字相同,但是参数列表和返回值不同
  3. 已知栈的输入,求栈的输出
    栈先进后出,队列先进先出
  4. 查找文件的linux命令
    find、which、whereis、locate
  5. ip地址是202.8.8.23,地址掩码是255.255.255.240,最多可以划分多少子网,每个子网最多多少台主机?
    讲解链接:https://mp.weixin.qq.com/s/DTOmKRwY16euvnZ0x1pbig
    255.255.255.240转换为二进制是:11111111.11111111.11111111.11110000,其中28个连续的1表示网络位、4个连续的0表示主机位。则子网数=2^4=16,主机数=子网数-2=14,其中两个一个是网络地址、一个是广播地址
  6. spring事务功能
    不同事务传播行为、隔离级别、超时设置等,java知识不懂不懂啊
  7. redis常见用途
    缓存、分布式锁、会话存储 数据库知识不懂不懂啊
  8. n个顶点的无向图,采用邻接表数据结构存储,存放表头节点的数组大小为?
    邻接矩阵是n*n,邻接表(也叫邻接列表)n
  9. 一个java编程题,考察类函数和try catch 和finally的
    ``
  10. 线程与进程

二、3道编程

提示:前两道很简单,不做回顾

#第一道题涉及到一个小知识,求字典最大的value及其对应的索引
dicts = {'a': 10, 'b': 5, 'c': 20, 'd': 15}
max_ = max(dicts.values())
for index, value in dicts.items():
	if value==max_:
		print(index)
		break

#生成随机数
import random
numbers = [1, 30, 5]
res = random.choice(numbers)

假设有n个项目组,m个候选人,每个项目组只喜欢若干特定的候选人,并希望录取到自己团队,每个项目组至多有一个名额,求最多多少项目组能录取到自己想要的候选人。

输入:
第一行n,m
接下来n行,第i行第一个值为第i个企业想要的候选人的人数t,后面t个数字代表第i个企业想要的候选人。

输出:
最多有多少项目组能录取到自己想要的候选人

举例:
输入为
4 4
2 1 2
2 4 3
1 1
1 4
那正确结果应该是4,因为项目组1.2.3.4.对应的候选人分别是2.3.1.4

提示: 二分图最大匹配问题,用匈牙利算法解决,有个文章讲的很清楚:https://mp.weixin.qq.com/s/z-vahmkp8S7K6N9T25C9nQ。 匈牙利算法的基本思想:首先从第一个左节点开始,寻找能与其配对的右节点,只要找到了就暂时将他们配成一对;如果对应的右节点已经被匹配走了,那就看该右节点匹配的左节点是否还能匹配其它右节点,如果有的话就让他两离婚,让该右节点与当前左节点二婚。

#projects是单个左节点、prefer是该左节点对应的边,visited存储已经被匹配的右节点
def match(project, prefer, left, right, visited):
	#尝试为给定的项目组找到其喜欢的候选人
    for candidate in prefer[project]:
        if candidate not in visited:
        	visited.append(candidate)
        	if right[candidate] is None or match(right[candidate], prefer, left, right, visited):
            	left[project] = candidate
            	right[candidate] = project
            	return True
    return False

def main(n, m, preferences):
    left = [-1] * n #存储项目组匹配的候选人索引
    right = [-1] * (m + 1) #存储候选人匹配的项目组索引
    max_matched = 0

    for project in range(n):
        visited = []
        if match(project, preferences, left, right, visited):
            max_matched += 1
    return max_matched

# 示例输入
n = 4
m = 4
preferences = [[1, 2],[4, 3],[1],[4]]

# 计算最大匹配数
print(main(n, m, preferences))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值