华为AI算法笔试 华为秋招 0910

笔试时间:2025年9月10日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

实现一个多尺寸滑动窗口特征转换函数,对时间序列数据提取5个特征:均值、标准差、最小值、最大值、线性趋势斜率。每个窗口大小从索引max(window_array)-1开始滑动。

输入描述

  • input_array:一维数组,表示时间序列数据
  • window_array:一维数组,多个窗口大小
  • 输出描述

    输出是一个二维数组,每一行对应一个窗口位置,包含所有窗口大小的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]

    参考题解

    解题思路:

    1. 验证输入,检查窗口数组是否为空,数组长度是否满足最大窗口要求
    2. 从max(window_array)-1开始滑动窗口
    3. 计算5个特征:均值、标准差、最小值、最大值、线性回归斜率
    4. 数值格式化处理(整数不带小数点,最多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的最高匹配文档。

    输入描述

  • 第一行:文档集合总数
  • 接下来每行:一篇文档内容
  • 下一行:窗口大小K
  • 下一行:查询次数
  • 接下来每行:查询时间t和查询内容
  • 输出描述

    每个查询输出一个文档编号,若无满足

    剩余60%内容,订阅专栏后可继续查看/也可单篇购买

    2025 春招笔试合集 文章被收录于专栏

    2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

    全部评论

    相关推荐

    点赞 评论 收藏
    分享
    评论
    1
    收藏
    分享

    创作者周榜

    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务