oppo 2023届校招笔试-机器学习算法工程师
笔试题目组成:
1、20道选择题
2、3道编程题
总体体验:机器学习算法岗,相比较起纯算法岗,编程部分会更简单一些。在牛客/力扣上大致排在中等左右。
选择题里面考了一道:给定邻接矩阵的深度优先遍历顺序。
编程题:
1: 三数之和 (通过全部用例):
输入[1,4,5,6,7,10,12,15], 18
从数列里面找到三个元素a, b, c, 使其和为target
输出: [ [1, 5, 12], [1, 7, 10], [5,6,7] ]
题目在力扣上有原题, 使用的方法为三指针. 循环遍历第一个指针i, 后面两个指针分别设置在i+1和n-1的位置上.
区别在于力扣的求和target为0. 而本次笔试的target是给定的。只需将力扣上对>0或者<0的判定改成>target或者<target的判定即可.
2: 鸟洞 (由于本题仅通过16.67%, 因此仅提供思路):
k只小鸟和n个鸟洞, 小鸟均匀随机选择一个树洞。问当k>=多少时, 至少存在一对小鸟选择了同一个树洞这件事的概率不小于p.
输入:n, p 分别为鸟洞数量和概率值 n = 365, p = 0.5
输出m=23. m为整数, 当k>=m时, 至少存在一对小鸟选择了同一个树洞 的概率>= 0.5
思路(不知道对不对):
类似于 有多少个学生时, 两个学生同一天生日 的概率 > 0.5
无重复鸟洞记录为事件q
p(至少存在一对小鸟选择了同一个树洞) >= 0.5
等价于
1-p(q) >= 0.5
设鸟数k=1
当只有1只小鸟时, p(q) = 100%
k+=1
当有2只小鸟时, p(q) = (365*364) / (365*365)
...当有k只小鸟时,
p(q) = (365*364*...*(365-k+1))/(365^k)
问题简化为, k=几的时候p(q)<=0.5
3: 最小公倍数
输入a,b,c
求最小公倍数
这题思路什么的不麻烦, 麻烦的主要是牛客网上的笔试输入, 有比较繁琐的输入格式.
这题比较简单, 直接贴代码了
import sys
inputs = sys.stdin.readline().strip().split(' ')
inputs = list(map(int,inputs))
a,b,c = [i for i in inputs]
max_num = max(a,b,c)
i = 0
none = True
while none:
i += 1
num = i*max_num
if num%a == 0 and num%b == 0 and num%c == 0:
none = False
print(num)
取三数中的最大数, 然后看看这个数能不能整除其他两个数
如果不行就把最大数乘2, 乘3...乘i. (num = max_num * i)
直到其他两个数字可以被max_num*i整除时, 返回num