华为AI算法笔试 华为秋招 0910
笔试时间:2025年9月10日
往年笔试合集:
第一题
实现一个多尺寸滑动窗口特征转换函数,对时间序列数据提取5个特征:均值、标准差、最小值、最大值、线性趋势斜率。每个窗口大小从索引max(window_array)-1开始滑动。
输入描述
输出描述
输出是一个二维数组,每一行对应一个窗口位置,包含所有窗口大小的5个特征。数值格式化规则:
- 整数不带小数点
- 最多保留3位小数
- 最后一位四舍五入
样例输入
[1, 2, 3, 4, 5], [2, 3]
样例输出
[2.5,0.707,2,3,1,2,1,1,3,1]
[3.5,0.707,3,4,1,3,1,2,4,1]
[4.5,0.707,4,5,1,4,1,3,5,1]
参考题解
解题思路:
- 验证输入,检查窗口数组是否为空,数组长度是否满足最大窗口要求
- 从max(window_array)-1开始滑动窗口
- 计算5个特征:均值、标准差、最小值、最大值、线性回归斜率
- 数值格式化处理(整数不带小数点,最多3位小数)
Python:
import ast, re, math
def p(s):
m = re.findall(r'\[.*?\]', s)
return ast.literal_eval(m[0]), ast.literal_eval(m[1])
def a(x):
return sum(x) / len(x)
def b(x, u):
n = len(x)
if n < 2:
return 0.0
t = sum((v - u) ** 2 for v in x)
return math.sqrt(t / (n - 1))
def c(x, u):
n = len(x)
if n < 2:
return 0.0
xm = (n - 1) / 2.0
vx = sum((i - xm) ** 2 for i in range(n))
if vx == 0:
return 0.0
cv = 0
for i in range(n):
cv += (i - xm) * (x[i] - u)
return cv / vx
def fm(v, d=3):
r = round(v, d)
if abs(r - int(round(r))) < 10 ** (-d):
return str(int(round(r)))
s = f"{r:.{d}f}".rstrip('0').rstrip('.')
return s
def solve(d, w, dec=3):
if not w:
return []
n = len(d)
mw = max(w)
if n < mw:
return []
res = []
for e in range(mw - 1, n):
t = []
for sz in w:
st = e - sz + 1
if st < 0:
continue
seg = d[st:e + 1]
u = a(seg)
s = b(seg, u)
mn_val = min(seg)
mx_val = max(seg)
slp = c(seg, u)
t.extend([fm(u, dec), fm(s, dec), fm(mn_val, dec), fm(mx_val, dec), fm(slp, dec)])
res.append(t)
return res
第二题
实现一个基于历史窗口的TF-IDF搜索引擎,在查询时间点t前的K篇文档中搜索,使用动态权重(越新的文档权重越高),计算余弦相似度并返回相似度≥0.6的最高匹配文档。
输入描述
输出描述
每个查询输出一个文档编号,若无满足
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

