
Akuna OA 是120分钟3道题,难度大概在Medium到hard,需要平时有大量的刷题经验积累才能做完。 这场OA也是顺利拿下了。 第一题求最小交交换次数,第二题是图论问题,第三题是一道动态规划。 注意,目前OA会有AI查重,所以尽量不要使用AI,AI查思路是可以的。
Akuna OA 题目
Q1:
给定一个字符串数组 words,要求对每个字符串计算最少需要进行多少次字符替换,使得字符串中不存在相邻两个字符相同的情况(可以把任意字符替换成任意其他字符)。最终返回一个整数数组,其中每个元素表示对应字符串的最小替换次数。本质是统计每段连续相同字符需要修改的次数,使字符串变成相邻字符都不同的形式。

思路:从左到右扫描字符串,一旦发现当前字符和后一个字符相同(即 w[i] == w[i+1]),就必须进行一次替换。为了用最少的步数解决问题,我们每次遇到这种情况就直接“跳两步”(i += 2),相当于把第二个重复字符换成了一个既不重前、也不重后的新字母,从而一次性消除当前的冲突并避免它对后续字符产生影响。
代码:
def minimalOperations(ws):
res = []
for w in ws:
c, i = 0, 0
n = len(w)
while i < n - 1:
if w[i] == w[i+1]:
c += 1
i += 2
else:
i += 1
res.append(c)
return resQ2:
题目:这道题要求实现一个通信管理系统(Communications Handler),用于管理任意时刻最多只能有两名用户通信的通道。需要完成 CommsHandler 类(包含 connect、hangup、clear_all 三个方法)以及自定义异常类 CommunicationException。connect 用于建立连接(若通道被占用或用户相同则抛异常),hangup 用于断开当前正在通信的两人(若不在通信中则抛异常),clear_all 用于清空通道状态。系统会根据输入的指令序列(connect / hangup)依次执行操作,并输出成功或错误信息。核心是正确维护当前连接状态并严格处理异常情况。



思路:用一个列表 active_connections 来模拟唯一的通信信道:在 connect 时先检查信道是否为空且两人是否不同,满足则把他们存入列表;而 hangup 时只需判断当前信道里的两人和申请挂断的是否匹配(不限顺序),匹配成功就清空列表释放信道,反之则抛出相应的自定义异常。
代码:
class ConnectionException(Exception):
def __init__(self, m):
self.m = m
def __str__(self):
return self.m
class CommsHandler(CommsHandlerABC):
def __init__(self):
self.active_connections = []
def connect(self, u1, u2):
if u1 == u2:
raise ConnectionException(f"{u1.name} cannot connect with {u2.name}")
if self.active_connections:
raise ConnectionException("Connection in use. Please try later")
self.active_connections = [u1, u2]
return f"Connection established between {u1.name} and {u2.name}"
def hangup(self, u1, u2):
if u1 == u2:
raise ConnectionException(f"{u1.name} cannot hangup with {u2.name}")
cur = self.active_connections
if cur and ((u1 == cur[0] and u2 == cur[1]) or (u1 == cur[1] and u2 == cur[0])):
self.active_connections = []
return f"{u1.name} and {u2.name} are disconnected"
raise ConnectionException(f"{u1.name} and {u2.name} not found in the communication channel")
def clear_all(self):
self.active_connections = []Q3:
题目:这道题给定一组无序的历史股票价格数据(格式为 [Stock, Date, Price]),以及初始资金 $1,000,要求计算在遵守规则(可买卖任意分数股、无交易成本、不能做空、同一时间只能持有一个仓位)的情况下,能够获得的最大利润,并将最终利润四舍五入为整数。核心是对每只股票按时间排序,找到一次最优“低买高卖”的机会(且必须先买后卖),比较所有股票中的最大收益,输出最大可获利润。
篇幅原因,可以联系我获取这题的思路和解答。
了解更多
最近也做了微软、亚马逊、TikTok等公司的OA,基本都顺利通过。每轮下来都比较顺利,没把握的可以多练习。
Interview Aid 专注北美技术岗位的面试辅助,如果你近期也拿到Akuna的OA,可以参考Akuna 一亩三分地的Timeline和面经,也可以与我们联系获取相关资料,同时我们免费提供Akuna真题参考。