深圳(ly)某公司面试题:
一:二叉树:考察先序遍历中序遍历(题目过于简单就不做叙述了)给出一个先序遍历以及中序遍历求出这个树的具体结构。
说到二叉搜索树,这里可以介绍一下二叉树搜索树的这个玩意儿是个啥,
- 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。
- 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。
它的时间复杂度最差情况下是n,平均情况下是log n
二:题目是比较具体的需要你根据具体的需求来制定对应的函数,具体的情形如下所示:
不同的兵种、每一个兵种能够运输资源的能力值也不同、需要制定一个快速选择功能:
1、让资源尽可能地运走
2、让参与运输的士兵数目尽可能地少
其实可以抽象为给定一个值,这个值所需要的和的组合,且这个组合中的数目要越少越好并且不超过一定值
测试代码如下所示
#具体方法 输入的三个参数分别为
#my_solidr 士兵的种类(List):其中第一个参数为士兵运输能力值、第二个参数为士兵的当前数量、第三个值为士兵的需要选择的数量
#max_res 资源的最大数量,不能够超过这个值,这是最大的前提
#max_solid 士兵可以雇佣的最大数量,不能够超过这个值,这是跟资源同级的最大前提
def GetSoliderList(my_solidr, max_res, max_solid):
res = []
for v in range(len(my_solidr)):
temp = max_res // my_solidr[v][0]
# 如果没有要求不能够超过最大的资源数量的话,可以下面注释的语句给它的数量+1,目前还不完善,因为如果当前这个的数量小于1的话需要拿上一个兵种的数量1,由下往上检测
# if temp == 0 and my_solidr[v][1] >= 1:
# res.append([my_solidr[v][0], my_solidr[v][1] - 1, 1])
# return res
if temp * my_solidr[v][0] == max_res and temp <= my_solidr[v][1]:
if temp <= max_solid:
res.append([my_solidr[v][0], my_solidr[v][1] - temp, temp])
return res
else:
res.append([my_solidr[v][0], my_solidr[v]
[1] - max_solid, max_solid])
return res
elif temp * my_solidr[v][0] < max_res and temp >= my_solidr[v][1]:
if my_solidr[v][1] <= max_solid:
res.append([my_solidr[v][0], 0, my_solidr[v][1]])
max_res -= my_solidr[v][1] * my_solidr[v][0]
max_solid -= my_solidr[v][1]
else:
res.append([my_solidr[v][0], my_solidr[v]
[1] - max_solid, max_solid])
return res
elif temp * my_solidr[v][0] < max_res and temp <= my_solidr[v][1]:
if temp <= max_solid:
res.append([my_solidr[v][0], my_solidr[v][1] - temp, temp])
max_res -= temp * my_solidr[v][0]
max_solid -= temp
else:
res.append([my_solidr[v][0], my_solidr[v]
[1] - max_solid, max_solid])
return res
return res
#测试输出
my_solidr = [[10, 200, 0], [5, 100, 0], [3, 100, 0], [2, 100, 0]]
max_res = 2434
max_solid = 300
print(GetSoliderList(my_solidr, max_res, max_solid))