华为 · 模拟 · 算法编程题
华为 模拟 时限 2 秒 / 256 MB

题目描述

小红正在手写一个视觉模型中的二维空洞卷积算子。输入是一张单通道特征图和一个 K*K 的卷积核。
计算前,需要先在输入特征图四周填充 padding 层 0。空洞卷积不会真的把卷积核插入 0,而是在访问输入窗口时,按 dilation 的间隔选取元素。
设卷积核大小为 K,膨胀率为 d,则有效卷积核尺寸为:
K_eff = K + (K-1)*(d-1)
输出尺寸为:
H_out = floor((H + 2*padding - K_eff)/stride) + 1
W_out = floor((W + 2*padding - K_eff)/stride) + 1
请按上述规则计算每个输出位置的乘加结果,并逐行输出最终矩阵。

输入输出

输入描述
输入特征图的大小( H 和 W )
输入特征图的元素,共 H×W 个,且全部为整数
卷积核的大小( K ),为奇数
卷积核的元素,共 K×K 个,且全部为整数
步长( stride )为 ≥1 的整数;
填充( padding )为正整数(仅支持常数 0 填充,输入特征图上下左右各填充 padding 层 0 );
膨胀率( dilation )为 ≥1 的整数( dilation=1 时等价于普通 2D 卷积)。
输出描述
逐行返回卷积后的二维特征图

样例共 1 组

样例 1
输入
3 3
1 2 3 4 5 6 7 8 9
3
1 0 -1 1 0 -1 1 0 -1
1
0
1
输出
-6

算法解析依据充分

考点:模拟

限制 2 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:2 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:模拟

本题切入点

按空洞卷积定义实现:有效核尺寸 K_eff = K+(K−1)(d−1),输出尺寸由 floor 公式给出,访问窗口时按 dilation 间隔取元素(不是真的插零)。

不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。

思路框架(模拟 通法 · 非本题专属)

  1. 用变量记录题目要求的「状态」(当前值、剩余数量、当前位置等)。
  2. 按题面给出的顺序,把每一步操作写成一段代码,逐条执行。
  3. 每一步执行后更新状态,并在题目要求的位置输出或累计答案。
  4. 注意循环的边界:执行多少次、何时终止、是否能终止。

实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。

复杂度:时间 O(操作次数) | 空间 O(状态数)

该范式的通法易错点

  • 终止条件写错导致死循环或漏做最后一次操作。
  • 状态更新顺序颠倒(先改了下标又用旧下标)。
  • 题目里「最多 / 恰好 / 至少」的语义差别没区分。

样例

样例 1

  • 输入:3 3 / 1 2 3 4 5 6 7 8 9 / 3 / 1 0 -1 1 0 -1 1 0 -1 / 1 / 0 / 1
  • 输出:-6

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年-华为-05月13号AI岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解