目录
正在加载目录...

Akuna OA 三题解答分析 难度中等 | Akuna capital OA 一亩三分地

Akuna OA 三题解答分析 难度中等 | Akuna capital OA 一亩三分地

Akuna OA 是120分钟3道题,难度大概在Medium到hard,需要平时有大量的刷题经验积累才能做完。 这场OA也是顺利拿下了。 第一题求最小交交换次数,第二题是图论问题,第三题是一道动态规划。 注意,目前OA会有AI查重,所以尽量不要使用AI,AI查思路是可以的。

Akuna OA 题目

Q1:

给定一个字符串数组 words,要求对每个字符串计算最少需要进行多少次字符替换,使得字符串中不存在相邻两个字符相同的情况(可以把任意字符替换成任意其他字符)。最终返回一个整数数组,其中每个元素表示对应字符串的最小替换次数。本质是统计每段连续相同字符需要修改的次数,使字符串变成相邻字符都不同的形式。

Akuna OA 题目Q1

思路:从左到右扫描字符串,一旦发现当前字符和后一个字符相同(即 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 res

Q2:

题目:这道题要求实现一个通信管理系统(Communications Handler),用于管理任意时刻最多只能有两名用户通信的通道。需要完成 CommsHandler 类(包含 connecthangupclear_all 三个方法)以及自定义异常类 CommunicationExceptionconnect 用于建立连接(若通道被占用或用户相同则抛异常),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真题参考。

正文完