面灵AI→

科大讯飞 27 届秋招研究算法笔试:选择题范围与三道编程题

轮次
笔试
时间
2026-10
来源
牛客网

《面试题目》

选择题(23 道)

  1. 选择题考查范围覆盖哪些方向?

编程题(3 道)

  1. 有 n 个礼盒,第 i 个礼盒里有 a_i 个苹果、b_i 个糖果。每次操作可以把 1 个苹果放进任意礼盒、把 1 个糖果放进任意礼盒,或者把 1 个苹果和 1 个糖果同时放进同一个礼盒;要让所有礼盒的苹果数彼此相等、糖果数也彼此相等,最少需要多少次操作?
  2. 已知整数 x、y,如果存在整数 a、b 使整数 n 可以写成 ax + by,就称 x、y 能够表示 n;求区间 [l, r] 内有多少个这样的 n?
  3. 给定长度为 n 的数组和整数 k,能否重排数组,使任意长度为 k 的子数组都不含重复元素?能就返回任意一个满足条件的排列,不能则返回 -1。

《参考解析》

笔试结构与准备重点

2026 年 10 月 11 日 16:00–18:00,两小时,23 道选择题加 3 道编程题。选择题覆盖机器学习、深度学习、计算机视觉(与投递方向直接相关)、C++、Python、概率论和导数:前两块是概念与原理题,CV 部分偏经典网络结构、损失函数与评价指标,C++ 与 Python 多考语言细节和容器复杂度,概率论与导数基本是可手算的小题(期望、条件概率、常见分布的期望方差、链式法则与常见函数的导数)。

准备上,把 CV 的骨干网络、检测与分割的常见做法、mAP 与 IoU 这类指标的定义过一遍,机器学习侧把过拟合与正则化、损失函数、优化器、评价指标串起来;语言部分注意指针与引用、内存管理、STL 容器的复杂度保证。编程题只有 3 道、难度中等,考的是贪心、数论和构造,写之前先把边界情况(n = 1、k 大于 n、区间含负数)列清楚。

礼盒苹果与糖果:每个礼盒的代价取两者较大值

一次操作只影响一个礼盒,各礼盒互不干扰,所以总操作数就是各礼盒操作数之和。目标是所有礼盒的苹果数都等于 A、糖果数都等于 B,显然 A 不小于 max(a)、B 不小于 max(b),而且把 A、B 取成各自的最大值不会更差:把 A 再加 1,需要补的苹果总数多 1,最多只能让某个礼盒里同一次操作顺手多补 1 个糖果,各礼盒的代价下界不会下降。

取 A = max(a)、B = max(b) 后,第 i 个礼盒要补 d_i = A − a_i 个苹果、e_i = B − b_i 个糖果。一次操作在一个礼盒里最多贡献 1 个苹果和 1 个糖果,所以这个礼盒至少要 max(d_i, e_i) 次;先做 min(d_i, e_i) 次「苹果 + 糖果」,再单独补剩下的差值,就能刚好达到这个下界。答案即

Σ max(A − a_i, B − b_i)

遍历一遍即可,时间复杂度 O(n),注意用 64 位整数存总量。

ax + by 能表示的整数个数

{ax + by | a, b ∈ Z} 恰好是 gcd(x, y) 的全部倍数构成的集合,这就是裴蜀定理:g = gcd(x, y) 一定能写成 ax + by,而任何 ax + by 都能被 g 整除。于是问题变成「[l, r] 内有多少个 g 的倍数」,答案

⌊r / g⌋ − ⌊(l − 1) / g⌋

这里必须用向下取整的除法(l 可能为负,C++ 的整除向零取整会算错)。特判 x = y = 0:此时只有 n = 0 可以被表示,看 0 是否落在区间里。求 gcd 用辗转相除,整体 O(log min(|x|, |y|))。

重排数组使任意长度为 k 的子数组无重复

「任意长度为 k 的窗口内元素互不相同」等价于「任意两个相等元素的下标之差不小于 k」(相邻的相等元素是唯一需要检查的约束)。先统计每个值的出现次数,按频次从高到低排成 f_1 ≥ f_2 ≥ …。

可行性判定:对每个 i 都要满足 f_i ≤ ⌈(n − i + 1) / k⌉。直观理解是把 n 个位置排成 k 列、⌈n / k⌉ 行的表格,同一个值只能占同一列的不同行(行间下标差正好是 k),频次越高的值要占越靠前的列,越靠后的值可用槽位越少,逐个校验即可。常见的两个必要条件——最大频次 ≤ ⌈n / k⌉、不同元素个数 ≥ k——只是这个条件的特例,光看它们会漏判(例如 n = 7、k = 3、频次为 3、3、1 时两条都满足,实际无解,因为第二个值时已经没有 3 个间隔为 3 的位置了)。

构造:按频次从高到低,把每个值的副本依次放进槽位序列 0, k, 2k, …,放到底就回到前面还没被占用的下一列继续,等价于按 k 列做列优先填充,这样同一个值的下标间隔恰好是 k,不会落进同一个窗口。全部放完按行读出来就是答案,中途放不下直接返回 -1。复杂度 O(n log n),主要花在按频次排序上。

这类笔试帖的复盘方式

选择题部分题目很杂,靠临时抱佛脚收益有限,真正能稳住的是把机器学习与 CV 的常见概念、语言细节和概率推导练到「看到题就知道考哪个点」。编程题三道都偏思维而非模板:第一道考「把题读成一个可分解的下界」,第二道考数论结论,第三道考可行性条件加构造——写的时候先把小样例手推一遍,能显著减少在实现细节上耗掉的时间。