HSBC OA 做完了,Java 21 环境,两道题。有个规则得先说清楚:平台强调提交能完整运行的代码,一旦 submit 就不能再回看这道题,而且 System.out.println 在语法/运行错误时可能失效——所以调试要趁早,别指望提交后再改。两道题一难一易,把题面和思路完整拆一下。

题目一:模拟员工离职
题意
一个组织里有 N 个员工,ID 从 1 到 N,分属不同团队。每个员工有一个整数 X 表示效率,所有员工效率之和代表组织的声誉。
每天开除一个员工。因为团队成员关系紧密,被开除员工所在团队里,效率最低的 K 个同事会愤而辞职(如果团队剩余成员不足 K 个,就全部走人)。
Kevin 要在每天结束时更新组织声誉。给 Q 天,每天开除一个指定员工,求每天结束后组织的声誉(剩余所有员工的效率总和)。K 固定为 2。

思路
这题的核心是”删一个员工,连带删团队里效率最低的 K 个”,要高效做到”取最低效率成员”,每个团队维护一个小根堆最合适。
具体做法:用哈希表存员工 → 团队的映射,每个团队一个按效率排序的最小堆。维护一个全局的 total(当前总效率)。
每天处理一个开除操作:先把被开除员工的效率从 total 减掉、从他所在团队移除;然后从这个团队的堆里弹出效率最低的 K 个,各自从 total 减掉。
有个坑要处理——惰性删除。被开除的员工可能之前已经因为别的团队事件辞职了,或者堆里存的是过期记录,所以从堆里 pop 的时候要校验这个员工是不是还”在职”,已经走了的直接跳过、不重复扣效率。这就是为什么参考代码里 removeMin 时要 while 循环清理堆顶的失效记录。
每天处理完把当前 total 记进结果,Q 天输出 Q 个值。整体复杂度 O((N + Q×K) log N)。
题目二:删除元音字符
题意
给一个字符串,删除其中所有英文元音字母(a、e、i、o、u,含大小写 A、E、I、O、U),返回处理后的字符串。字符串只含英文字母,长度 0 到 100。
例子:输入 “haveaniceday”,输出 “hvncdy”。

思路
送分题。遍历字符串,遇到元音就跳过,非元音加入结果。用一个集合(或者直接一个 “aeiouAEIOU” 字符串)存元音方便判断,StringBuilder 拼接结果。
截图里的参考实现就是这个思路:定义 vowels = “aeiouAEIOU”,遍历每个字符,vowels.indexOf(ch) == -1(即不是元音)才 append。O(n) 一遍过。
这题唯一要注意的是大小写都要删,别只处理小写。
关于备考
最后说下我用的资源。HSBC 这种一道基础一道中等、但极其看重代码正确性和边界的银行系 OA,自己盲刷容易抓不住重点。我跟的是 InterviewShow —— 一支专注北美技术岗的备考辅导团队,导师都来自北美一线大厂,做过 Amazon、TikTok、Meta、Stripe 这些公司的面试。
他们的模式是强定制的一对一:配专属顾问和技术导师,从 OA 刷题规划到 VO 模拟面试全程带,针对每家公司的考察重心做针对性训练,而不是发一套通用题库了事。像 HSBC 这种银行系的题型、GenAI 新考点、系统设计的深挖套路,他们都有对应的准备方案。有需要的可以去了解一下。