面灵AI→

用友软件开发岗笔试:4 道编程题,3 道限 JS/Java

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

《面试题目》

  1. 签到题:数组 + 简单模拟(原帖未展开描述)。
  2. 给定 (name, val) 列表,先按 val 从小到大排序,val 相同的按 name 出现顺序排序,然后输出流程字符串(以 start / end 作为开头和结尾);注意对于 val 相同的多个 name 需要先 fork_val 再 join_val。
  3. 输入是 JSON 字符串,主要任务是合并日期区间。
  4. 给定一个汇率交换的关系列表(注意是单向关系,本质上有向图),求:① 货币 A 换成货币 B 能得到的最大汇率;② 货币 A 换成货币 B 的最小交换次数和对应的交换方案。

《参考解析》

第二题:多关键字排序 + 分组格式化

排序键是 (val, 原始下标),用稳定排序或者显式带上下标即可保证同 val 时按出现顺序排。按 val 分组后,组内只有一个元素就直接串 prev->name、name->next;组内多于一个元素时先插 prev->fork_val,再让每个 name 挂到 fork 下面,收尾插 join_val 并接到 next。以题面样例(A 1 / B 2 / C 2)为例:start->A、A->fork_2、fork_2->B、fork_2->C、B->join_2、C->join_2、join_2->end。这题逻辑不难,但边界(空列表、只有一个元素、最后一组)和输出格式要一次对齐,否则会反复 WA。

第三题:JSON 日期区间合并

Python 一行 json.loads 就能拿到数组,Java 需要 Jackson / Gson,题面里给的那段手写解析代码说明它并不打算考解析本身。合并前先把每个区间转成可比大小(datetime.date,或者「距 1970-01-01 的天数」),再按起点排序线性扫一遍:若 next.start <= cur.end + 1 天 就并入当前区间并更新 cur.end = max(cur.end, next.end),否则结算当前区间、开新区间。坑点就是「相邻也算重叠」——[1,3] 和 [4,6] 必须合并成 [1,6],写成 next.start <= cur.end 会漏掉这种用例。

第四题:汇率图上的最大乘积与最少兑换次数

边是单向的、边权是正数汇率,所以第一问是最大乘积路径:取对数把乘法变加法后用最长路思路,或者直接 Floyd 变形 rate[i][j] = max(rate[i][j], rate[i][k] * rate[k][j])。要主动说明有环的情况:如果存在乘积大于 1 的环,理论上可以无限套利、最大值不存在,工程上应按「限定兑换次数」收敛或者直接判定套利。第二问每条边代价都是 1,BFS 求最短路即可,同时用 parent 数组记录前驱,从终点回溯出兑换方案;如果要求字典序最小或多解任选,也要说清判定规则。两问输入都是 JSON,写的时候把解析和算法分开,别把时间耗在字符串处理上。

关于语言限制

3 道题限 JS / Java,本质是考这两门语言自带的容器与 JSON 序列化能力(Java 的 HashMap / TreeMap / Arrays.sort,Node 的 Map 和 JSON.parse)。平时主刷 Python 的选手至少要准备一套「读标准输入 + 解析 JSON + 排序输出」的 Java 模板,否则题再简单也写不出来——这也是原帖第四题直接交卷的原因。另外笔试前先看清楚每题的语言开关,同一场考试里换语言要重新适应输入输出格式,很费时间。