【笔试刷题】蚂蚁-2026.04.09-算法岗-改编真题

✅ 春招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力

🌸 目前本专栏已经上线200+套真题改编解析,后续会持续更新的

春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗

蚂蚁-2026.04.09-算法岗

三道题方向各异:第一题考查单调性判断,第二题建模为 HMM,用 Viterbi 求最优路径,第三题需要分解最小公倍数中的质因子结构。题面表述清晰,难点在于每题所用模型差异较大,切题方向需要分开判断。

1. 柯南的机关积分

问题描述

柯南在追查黑衣组织时,进入了一条由 道机关构成的密道。他的初始积分为 ,每道机关处有两扇可选的门,每扇门对应一种对当前积分的运算:

  • + x:积分加
  • - x:积分减
  • * x:积分乘
  • / x:积分整除 ,结果向下取整

每经过一扇门后,立即将积分截断至区间

  • 结果小于 时,积分取
  • 结果大于 时,积分取

柯南在每道机关处必须二选一。请计算通过全部 道机关后,积分的最大可能值。

输入格式

第一行输入一个整数 ,表示机关数量。

接下来 行,每行给出两组操作,格式为:

op1 x1 op2 x2

其中 op1op2 是四种运算符之一, 均为正整数。

输出格式

输出一个整数,表示通过全部 道机关后可以达到的最大积分。

样例输入1

3
+ 10 * 2
* 2 / 5
- 5 / 2

样例输入2

3
- 10 * 1
* 2 / 100
/ 2 + 1000

样例输出1

17

样例输出2

1002

数据范围

  • 每一步运算后都要把积分截断到

样例解释1

从初始值 出发,第一关选 + 10 得到 ,第二关选 * 2 得到 ,第三关选 - 5 得到

样例解释2

第一关选 - 10 截断为 ,选 * 1 同样得到 ;第二关选 * 2 得到 ;第三关选 + 1000 得到

题解

四种运算配合截断操作后,每一步转移都构成关于当前积分的单调不减函数。这一性质使贪心策略成立:每道机关处直接选取两扇门中结果较大的那扇,最终输出即为全局最优。

单调性分析

设当前积分为 ,对任意正整数

  • 关于 严格递增
  • 关于 严格递增
  • )关于 单调不减
  • 关于 单调不减

截断操作 同样保持单调不减。因此,每扇门的完整转移(运算后截断)都是 的单调不减函数。

贪心的正确性

为第 关结束后积分为 时,后续所有关卡能取得的最优值。每一步转移均单调不减, 作为若干此类函数的复合,仍然单调不减。

因此,若当前关两个候选结果为 ,则 。选取较大的候选值,后续的最优表现不会更差。这保证了每关局部最大就是全局最优路径的一部分。

算法流程

初始化 ,顺序处理每道机关:

  1. 分别计算两扇门作用后的结果
  2. 对两个结果各自截断至
  3. 取较大值更新

输出最终的

复杂度分析

  • 时间复杂度:
  • 空间复杂度:

参考代码(Python)

import sys

def readline():
    return sys.stdin.readline().strip()

LIMIT = 10**9

def bound(value):
    if value < 1:
        return 1
    if value > LIMIT:
        return LIMIT
    return value

def perform(value, operator, operand):
    if operator == "+":
        return bound(value + operand)
    if operator == "-":
        return bound(value - operand)
    if operator == "*":
        return bound(value * operand)
    return bound(value // operand)

def main():
    steps = int(readline())
    score = 1
    for _ in range(steps):
        first_op, first_num, second_op, second_num = readline().split()
        first_num = int(first_num)
        second_num = int(second_num)
        result_a = perform(score, first_op, first_num)
        result_b = perform(score, second_op, second_num)
        score = result_a if result_a >= result_b else result_b
    print(score)

if __name__ == "__main__":
    main()

2. 工藤新一的推理路径

问题描述

工藤新一在分析一段密文时,发现它可以用离散型隐马尔可夫模型(HMM)建模。给定模型参数与若干条观测序列,需要对每条序列分别求出:

  • 最可能的隐藏状态序列(最优路径)。
  • 该路径对应的对数概率。

模型参数包括:

  • 初始状态分布 pi
  • 状态转移矩阵 A
  • 观测概率矩阵 B
  • 多条离散观测序列 obs

若使用 Python,除标准库外只允许依赖 numpy。所有计算须在对数域中进行,以规避概率连乘导致的数值下溢。

输入格式

输入只有一行,是一个标准 JSON 对象,不含注释,格式如下:

{"pi":[0.6,0.4],"A":[[0.7,0.3],[0.4,0.6]],"B":[[0.5,0.4,0.1],[0.1,0.3,0.6]],"obs":[[0,0],[2,1,0]]}

字段含义如下:

  • pi:长度为 N 的初始状态概率数组。
  • AN×N 的状态转移矩阵,A[i][j] 表示从状态 i 转移到状态 j 的概率。
  • BN×M 的观测概率矩阵,B[i][k] 表示状态 i 生成符号 k 的概率。
  • obs:共 S 条观测序列,每个符号均为区间 [0, M-1] 内的整数。

输入中的概率已合法归一化,无需额外校验。

输出格式

输出一行压缩后的 JSON,键名顺序固定为 paths 在前、logp 在后:

{"paths":[[0,0],[1,1,0]],"logp":[-2.253795,-4.017384]}

要求:

  • paths[i] 对应 obs[i] 的最优隐藏状态序列。
  • logp[i] 对应该最优路径的对数概率。
  • logp 中每个数固定保留 6 位小数。
  • 整行 JSON 不插入额外空格。

样例输入

{"pi":[0.6,0.4],"A":[[0.7,0.3],[0.4,0.6]],"B":[[0.5,0.4,0.1],[0.1,0.3,0.6]],"obs":[[0,0]]}

样例输出

{"paths":[[0,0]],"logp":[-2.253795]}

数据范围

  • 1 ≤ N ≤ 4
  • 1 ≤ M ≤ 4
  • 1 ≤ S ≤ 10
  • 单条观测序列长度 1 ≤ L ≤ 6
  • 所有浮点计算按 float64 处理

样例解释

  • 样例 1:观测序列为 [0, 0],共两个符号。最优路径为 0 → 0,对应概率 ,取对数后约为 -2.253795

题解

本题对每条观测序列独立运行 Viterbi 算法,求解最大概率路径并回溯还原。

状态定义

为处理到第 个观测符号、当前隐藏状态为 时所能达到的最大对数概率。

同时维护前驱数组 ,记录第 步到达状态 的最优前驱状态。最终沿 从后向前回溯,可还原完整路径。

对数域的作用

概率连乘会随序列增长而迅速趋零,直接用浮点乘法容易产生下溢。将所有概率取对数后,乘法转化为加法:

转移过程变为对若干对数值求和后取最大,数值稳定性得以保证。本题只需最优路径,无需计算全局归一化概率,因此使用 max 转移即可,不涉及 log-sum-exp

转移公式

初始化:

递推():

每步枚举终点状态 ,遍历所有前驱状态 ,取使括号内值最大的 作为最优前驱,存入

回溯过程

在末层 中取最大值对应的状态作为路径终点,随后依据 逐步向前回跳,将各步状态收集后翻转,得到最终路径。最优路径的对数概率即为

复杂度分析

设隐状态数为 ,单条序列长度为 ,序列条数为

  • 时间复杂度:
  • 空间复杂度:

在本题约束()下,按定义直接实现即可满足性能要求。

参考代码(Python)

import sys
import json
import math

def to_log_vector(values):
    return [math.log(x) if x > 0 else float("-inf") for x in values]

def to_log_matrix(

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

##&nbsp;思维转变:Agent开发的本质在讨论具体技术前,需要先理解Agent开发与传统AI/软件开发的根本不同。Agent的本质是&nbsp;**LLM&nbsp;+&nbsp;Memory&nbsp;+&nbsp;Planning&nbsp;+&nbsp;Tool&nbsp;Use**&nbsp;的集合体,要求开发者从&quot;面向过程编程&quot;转向&quot;面向目标(Goal-Oriented)编排&quot;。Agent构建的是一个能在开放环境中**感知-规划-行动-观察**的动态系统,而非传统的&quot;输入-处理-输出&quot;封闭流程。---##&nbsp;六步学习路线图###&nbsp;第一步:掌握大语言模型基础**Python**是目前Agent开发的绝对主力语言(其次是TypeScript、Go),在此基础上深入学习:-&nbsp;**Prompt工程**:从简单的指令设计升级为结构化编程,掌握思维链(Chain-of-Thought)、少样本学习(Few-Shot)、输出格式化(JSON/XML)等高级技巧-&nbsp;**函数调用(Function&nbsp;Calling)**:这是让LLM连接外部世界的关键协议,需精通如何定义、描述工具函数并解析LLM的调用请求-&nbsp;**上下文管理**:理解Token计算、上下文窗口限制及溢出处理,让Agent拥有持续对话和长期学习的能力###&nbsp;第二步:精通编排框架-&nbsp;**LangChain&nbsp;/&nbsp;LangGraph**:LangChain生态中,LangGraph将Agent建模为&quot;有向图&quot;,通过节点和边管理复杂的循环和自我纠错,是生产环境使用最广泛的框架。入门时需要深入理解Chain和Graph概念,以及DAG(有向无环图)的执行逻辑-&nbsp;**LlamaIndex**:如果你的Agent核心任务是处理海量企业文档(RAG),LlamaIndex是最强大的数据连接器和索引技术首选###&nbsp;第三步:构建记忆与检索体系Agent的智能很大程度上取决于它&quot;记得什么&quot;:-&nbsp;**向量数据库**:熟练使用Milvus、Pinecone、腾讯云VectorDB等-&nbsp;**RAG进阶**:掌握分块策略(Chunking)、重排序(Re-ranking)、混合检索(Hybrid&nbsp;Search),以及如何防止长短期记忆污染、保证检索准确率-&nbsp;**记忆机制**:理解对话记忆、摘要记忆、向量记忆等多种模式,让Agent具备长期学习能力###&nbsp;第四步:工具调用与集成架构Agent的能力边界等于其可调用工具的集合。核心技能包括:-&nbsp;**工具抽象与封装**:将内部API、数据库查询甚至RPA流程封装成标准化的工具函数-&nbsp;**工具路由与编排**:设计逻辑让Agent根据上下文自动选择合适工具-&nbsp;**MCP协议**:2026年已成为连接模型与外部工具的事实标准,开发的工具插件可以在LangChain、Claude、AutoGen之间无缝通用-&nbsp;**安全性设计**:工具调用必须置于权限和审核机制之下,设计熔断策略和降级方案###&nbsp;第五步:掌握核心架构模式两种最核心的智能体架构模式必须深入理解:|&nbsp;模式&nbsp;|&nbsp;核心逻辑&nbsp;|&nbsp;适用场景&nbsp;||------|----------|----------||&nbsp;**ReAct**&nbsp;|&nbsp;每一步行动前先输出思考过程:Thought&nbsp;→&nbsp;Action&nbsp;→&nbsp;Observation&nbsp;→&nbsp;Thought...&nbsp;|&nbsp;需要动态调整的开放式任务&nbsp;||&nbsp;**Plan-and-Solve**&nbsp;|&nbsp;先生成完整步骤清单,再逐一执行,执行后进行反思与修正&nbsp;|&nbsp;任务路径相对明确的场景&nbsp;|此外,Multi-Agent&nbsp;Collaboration(多智能体协作)模式也已成为标配,让多个专精Agent分工合作完成复杂任务。###&nbsp;第六步:工程化与评估这是Demo和生产级应用的核心区别:-&nbsp;**评估体系**:使用Ragas等工具建立自动化测试集,量化Agent表现-&nbsp;**鲁棒性设计**:当模型出现幻觉或死循环时,系统需有熔断机制-&nbsp;**可观测性**:使用LangSmith&nbsp;/&nbsp;LangFuse记录Agent每一步的思考轨迹,定位问题节点-&nbsp;**微调能力**:在必要时针对特定任务微调小参数模型(SLM)以降低成本---##&nbsp;主流框架全景根据功能定位和技术复杂度,Agent框架可分为三类:|&nbsp;类别&nbsp;|&nbsp;代表框架&nbsp;|&nbsp;特点与适用场景&nbsp;||------|----------|----------------||&nbsp;**逻辑编排框架**&nbsp;|&nbsp;LangGraph、LangChain、LlamaIndex&nbsp;|&nbsp;底层架构层,决定Agent如何思考、规划和执行任务&nbsp;||&nbsp;**多智能体协作框架**&nbsp;|&nbsp;CrewAI、AutoGen&nbsp;|&nbsp;当需要多个角色协作时使用,如CrewAI擅长角色扮演式分工&nbsp;||&nbsp;**低代码/可视化平台**&nbsp;|&nbsp;Dify、Coze、n8n&nbsp;|&nbsp;适合快速原型验证和非技术人员使用&nbsp;|**选型速查**:-&nbsp;追求**生产环境极致稳定**&nbsp;→&nbsp;LangGraph-&nbsp;追求**快速原型和商业演示**&nbsp;→&nbsp;CrewAI-&nbsp;追求**与企业现有系统深度集成**&nbsp;→&nbsp;Semantic&nbsp;Kernel&nbsp;或&nbsp;Dify-&nbsp;核心任务是**海量文档RAG**&nbsp;→&nbsp;LlamaIndex---##&nbsp;关键技术速查表|&nbsp;技术领域&nbsp;|&nbsp;必学项&nbsp;|&nbsp;进阶项&nbsp;||----------|--------|--------||&nbsp;编程语言&nbsp;|&nbsp;Python&nbsp;|&nbsp;TypeScript&nbsp;/&nbsp;Go&nbsp;||&nbsp;编排框架&nbsp;|&nbsp;LangChain&nbsp;/&nbsp;LangGraph&nbsp;|&nbsp;LlamaIndex&nbsp;||&nbsp;多Agent协作&nbsp;|&nbsp;CrewAI&nbsp;|&nbsp;AutoGen&nbsp;||&nbsp;向量数据库&nbsp;|&nbsp;Milvus&nbsp;/&nbsp;Pinecone&nbsp;|&nbsp;Tencent&nbsp;Cloud&nbsp;VectorDB&nbsp;||&nbsp;RAG技术栈&nbsp;|&nbsp;分块&nbsp;+&nbsp;混合检索&nbsp;|&nbsp;重排序&nbsp;+&nbsp;多模态检索&nbsp;||&nbsp;协议标准&nbsp;|&nbsp;MCP&nbsp;2.0&nbsp;|&nbsp;Semantic&nbsp;Kernel&nbsp;||&nbsp;评估调试&nbsp;|&nbsp;LangSmith&nbsp;/&nbsp;LangFuse&nbsp;|&nbsp;Ragas&nbsp;+&nbsp;AgentRx&nbsp;||&nbsp;架构模式&nbsp;|&nbsp;ReAct&nbsp;+&nbsp;Plan-and-Solve&nbsp;|&nbsp;Multi-Agent&nbsp;Collaboration&nbsp;|---##&nbsp;面试高频考点1.&nbsp;**ReAct与Plan-and-Solve的区别**:ReAct是动态逐步推理-行动循环,Plan-and-Solve是先生成完整计划再执行,各适用于什么场景?2.&nbsp;**如何设计Agent的记忆系统**:短期记忆(对话历史)和长期记忆(向量数据库)如何配合?如何防止记忆污染?3.&nbsp;**工具调用的安全性设计**:如何防止Agent越权操作?熔断机制如何设计?4.&nbsp;**多智能体协作的设计模式**:何时用中心协调模式,何时用对等协商模式?5.&nbsp;**Agent评估体系的设计**:如何量化一个Agent的好坏?Ragas等工具的核心指标是什么?---**一句话建议**:不要停留在Demo层面,动手构建一个能解决真实问题的Agent——比如自动分析日志的运维智能体或智能客服——才能真正掌握从胶水层到工程化的全链路能力。
想从事Agent应该学习...
点赞 评论 收藏
分享
csig&nbsp;腾讯云&nbsp;暑期一二面面经:一面&nbsp;50min实习经历括号对是否合法反问二面&nbsp;40min实现一个高并发高可用的消息队列来完成生产者消费者模型实习经历是的,你没看错。全程无八股。年前的字节、快手,到这次的藤子,一个八股都没问过。说实话有点不习惯,以前背得滚瓜烂熟的HashMap、线程池、JVM调优,一个都没用上。如果不涉密,我已经想开个班把实习经历卖出去了。目前的情况:腾讯、字节,两个应用部门都不问八股。下周准备挑战私募和创业厂,看看那边还背不背八股。---给正在准备面试的同学一点参考:1.&nbsp;八股不是没用,但优先级在下降大厂应用部门更看重你实际做过什么、能不能讲清楚项目中的决策和踩坑。背题能过简历关,但过不了面试关。2.&nbsp;实习经历是新的“八股”现在面试官喜欢问:“你当时为什么这么设计?”“有没有别的方案?”“如果流量翻十倍怎么办?”建议把实习中的每一个细节都准备好,尤其是矛盾点、取舍、复盘。3.&nbsp;不同公司、不同部门差别很大有的组还喜欢拷打基础,有的组全程聊项目。面之前可以多看看该部门的面经风向,别只背通用八股。4.&nbsp;如果遇到全程聊项目的面试官,恭喜你说明他真想看你能不能干活。这时候把项目讲得有逻辑、有数据、有反思,比背一百道题都管用。最后:不是八股彻底死了,而是面试正在变回“聊天”而不是“考试”。祝大家都能遇到聊得来的面试官。
查看3道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务