科大讯飞 Java 笔试(9.28):通用单选、AI Coding 与数组最值迭代题
- 轮次
- 笔试
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
笔试(9 月 28 日)
- 通用单选题 18 道,覆盖操作系统、计算机网络等内容
- Java 方向单选题 7 道
- AI Coding 1 道,30 分
- 编程题:给一个数组,每次操作找到当前最大值 max,然后用 max 减去每个元素 Ai 得到新一轮数组,重复若干轮后输出最终的数组
《参考解析》
-
编程题的关键是看清「最值位置会互换」:设本轮最大值为 max、最大值下标 p、最小值下标 q。新一轮每个元素都变成 max 减自身,于是 p 位置变成 0(新数组的最小值),q 位置变成 max 减最小值(新数组的最大值)。所以只要在第一次遍历时记下最大值与最小值的位置,之后每轮把这两个下标交换即可,不必每轮再扫两遍找最值——这正是从「两趟遍历」优化到「一趟变换」的地方。
-
还能再进一步:把整轮操作看成一次仿射变换:每一轮都是「常数减当前值」,等价于取负再加常数,也就是值 = 系数 × 原值 + 常数。每轮只更新这组系数与常数,配合原数组的最大值、最小值按当前符号推出本轮最大值,最后一次性还原出答案数组,连每轮的 O(n) 变换都能省掉。笔试里写出这个观察很占优势,但要把边界(元素相等、只有单个元素、操作轮数为 0)在草稿上过一遍再提交。
-
卡在 70% 多半是输入输出和剪枝:大数组加多轮操作时,逐行
Scanner和字符串拼接会吃掉大量时间,换成快读(BufferedReader按行或自定义readInt)并用StringBuilder一次性输出,往往就能把超时的那部分拿回来;数据规模大时还要注意不要每轮都新建数组。 -
选择题结构决定备考重点:18 道通用单选里操作系统与计算机网络占了大头,Java 方向单独一块。这类笔试的准备优先级很清楚——进程线程与调度、内存与文件系统、TCP 与 HTTP、子网划分这些基础先过一遍,Java 部分再看集合、JVM 与并发,别把时间全砸在框架细节上。
-
AI Coding 环节注意判分节奏:这类环节判分通常要排队,等待时间受平台负载影响,别在没想清楚时反复提交刷次数。稳妥的做法是本地把样例和边界都跑通再交,一次过;如果多次提交都卡在同样的用例,先怀疑是输入输出格式或边界条件,而不是继续盲改逻辑。