1.自我介绍
2.介绍AI4Math自动证明三角恒等式的工作
3.算法题,面试节奏还不错,题目循序渐进
第一个简单题热身
"""
a = [3, 94, -59, 23, -48, 7, 5, -92,
34, 7, 53, -2, 84, 91, -3, 48, 23]
def largest_sum(a, k):
# 从数组 a 中取 k 个数,
# 其和最大是多少?返回该值。如果要求是连续的k个数呢
return
print('largest_sum:',
[largest_sum(a, i) for i in range(1, 8)])
"""
def largest_sum(a,k):
cur = sum(a[0:k])
ans = cur
for i in range(k, len(a)):
cur += a[i]
cur -= a[i - k]
ans = max(ans, cur)
return ans
然后还是个难一点点的简单题
"""
cuboids = [
[( 80, -88, 72), (-45, 65, -46)],
[( 25, -82, -77), (-80, 34, 76)],
[( 37, -96, -82), (-86, 63, -27)],
[( 60, 3, 17), ( -8, -32, -89)],
[(-81, 80, 48), ( 88, -46, -73)],
[(-65, -24, 61), ( 40, 68, -81)],
[(-96, 1, -35), ( -4, 94, 60)],
[(-45, -13, 17), (-76, -53, 16)]]
def intersect_volume(cuboids):
# cuboids = [[(x1, y1, z1), (x2, y2, z2)], ...] 是若干个长方体
# 其中 (x1, y1, z1) -> (x2, y2, z2) 是每个长方体对角线的端点坐标
# 长方体的边均平行于坐标轴 (所以可由一条对角线唯一确定)
# 请返回这些长方体相交区域的体积 (该区域与所有长方体都相交)
return
print('intersect_volume',
[intersect_volume(cuboids[:i+1]) for i in range(len(cuboids))])
def intersect_volume(cuboids):
(x1, y1, z1), (x2, y2, z2) = cuboids[0]
x_left, x_right = min(x1, x2), max(x1, x2)
y_left, y_right = min(y1, y2), max(y1, y2)
z_left, z_right = min(z1, z2), max(z1, z2)
for i in range(1, len(cuboids)):
(x1, y1, z1), (x2, y2, z2) = cuboids[i]
cur_x_left, cur_x_right = min(x1, x2), max(x1, x2)
cur_y_left, cur_y_right = min(y1, y2), max(y1, y2)
cur_z_left, cur_z_right = min(z1, z2), max(z1, z2)
x_left = max(x_left, cur_x_left)
x_right = min(x_right, cur_x_right)
y_left = max(y_left, cur_y_left)
y_right = min(y_right, cur_y_right)
z_left = max(z_left, cur_z_left)
z_right = min (z_right, cur_z_right)
l_x = max(0, x_right - x_left)
l_y = max(0, y_right - y_left)
l_z = max(0, z_right - z_left)
return l_x*l_y*l_z
"""
然后是逐渐进阶的题目
def robot_num(k, t):
Big = 0
Small = 1
for i in range(t):
old = Big
Big += Small
Small = old*k
return Small, Big
# return Big +Small
# 第 0 天有 1 个小机器人
# 小机器人用 1 天时间可以自我建造成为大机器人
# 大机器人用 1 天时间可以建造 k 个小机器人
# 求第 t 天的机器人总数
def engineer_num(k, t, n):
# 若小机器人需要 n 个组队协作才能自我建造成为大机器人
# 当小机器人数量不足时,需要相应数量的工程师协助
# 求第 t 天需要的工程师数量最少为多少
Big = 0
Small = 1
need = 0
for i in range(t+1):
old = Big
Big += Small
res = Small%n
if res != 0:
need = n - res
else:
need = 0
Small = old * k
return need
def engineer_num_fast(k, t, n):
# 若 t 非常大,请优化函数 engineer_num 的复杂度
return
print('engineer_num_slow:',
[engineer_num(7, 2**i, 123) for i in [2, 4, 6, 8]])
print('engineer_num_fast:',
[engineer_num_fast(7, 2**i, 123) for i in [2, 4, 6, 8, 2021]])
#最后的没有想出来,我的想法是记第i天的大小机器人为B_i,S_i
有递推关系式S_i = B_i-1 *k, B_i = B_i-1 + S_i-1。 可以求解出S_i与B_i的表达式, 然后再得到need = n - S_i%n, 求S_i的过程可以提前取mod。 但是面试官反馈好像是应该有更好的做法。
最后是提问环节
1.对我这样转行的有啥建议吗?
学习底层的数据结构与算法(多刷题),至于具体的AI相关的,只要你足够聪明,学得很快
2.对我这样转行的同学,计算机论文是必须的吗?
不是必须的,面试官一般会根据你的简历来提问。



