资讯动态

爱奇艺2019秋招算法岗笔试A卷考点复盘与解题思路

发布时间:2026/8/31 2:02:26 来源:尧图企业网站定制
每次看到有同学问爱奇艺算法岗笔试难不难我都能回想起自己当年坐在那套A卷前的心情。2019年那会儿视频平台算法岗的竞争已经很大了爱奇艺的笔试题目不像腾讯那样大而全也不像头条那样动不动就上hard难度它的风格更偏向看着都会动笔就卡——基础题占一半单拎出来都不算难但组合在一起对基本功的扎实程度要求相当高。尤其是KMP的next数组、贪心的证明、LR的梯度推导这些老生常谈的考点你以为自己会了一到手写就露馅。这篇文章就基于我当年参加爱奇艺2019秋招算法方向笔试题A的回忆和复盘整理成一套完整的题目拆解与考点分析把我当时踩过的坑、后来复盘发现的规律以及正确的解题思路都写清楚希望能帮准备算法岗秋招的同学少走一点弯路。1. 这套A卷到底在考什么关卡分布与战略取舍1.1 题型结构与时间分配爱奇艺这套A卷给我的第一印象是题型非常规整。选择题、编程题、简答题三块都有选择题覆盖数据结构、算法复杂度、机器学习基础编程题一般是两道简答题会涉及模型推导或场景设计。整场考试120分钟我印象里选择题大概占了50分编程题30分简答题20分。时间分配是很多人容易翻车的点。我的策略是选择题控制在40分钟以内两到三分钟一道拿不准的立刻标记跳过不在任何一道题上纠结超过五分钟。编程题留足50分钟因为不仅要写对还要考虑边界条件很多同学代码主体写对了挂在数组越界或者空输入上。简答题最后30分钟集中做这类题只要思路清晰、公式推导完整即使答案不完美也能拿大部分分。提示爱奇艺的笔试系统支持本地IDE编译调试但切换语言和编译环境会浪费几分钟建议提前熟悉牛客网的代码编辑器尤其是C和Python两种语言的切换。1.2 爱奇艺算法岗偏好的能力模型如果你把爱奇艺A卷和同年腾讯、字节的笔试题放在一起对比会发现一个很明显的差异爱奇艺不太考偏题怪题它更看重基础算法的熟练度和机器学习理论的扎实程度。原因也不难理解爱奇艺的算法岗核心业务是推荐、搜索、广告和视频理解这些场景依赖的是你能不能在真实数据流中快速迭代模型、处理海量日志、设计AB实验而不是会不会解某个奥林匹克级别的脑筋急转弯。所以这套卷子里的编程题基本都落在二分、贪心、DP、KMP、排序变体这几个经典模块里选择题里机器学习部分占比很高包括损失函数、正则化、梯度下降、评估指标这些。战略上如果你当前时间有限优先刷高频数据结构和机器学习推导题收益会比死磕hard题高很多。1.3 我当时的第一感受说实话点开试卷看到第一道选择题是KMP的next数组时我心里咯噔了一下。这道题很多人都是背过模板但从来没手算过。而爱奇艺偏偏就喜欢考这种你觉得自己会但让你在纸上算一遍就卡住的题。所以接下来我从这道题开始拆解。2. 字符串与排序被大多数人轻视的送分题2.1 KMP的next数组背模板会死得很难看题目大概是这样的在KMP算法中对于模式串 p abacaba其 next 数组next[i] 定义为p[0..i]的最长相等前后缀长度是多少这道题考察的是KMP算法的next数组构造不让你写代码而是让你手算这比写代码更能筛掉背模板型选手。我当时差点就按记忆中的模板直接套还好停了一下用定义重新推了一遍。next[i]的准确定义是对于子串 p[0..i]它自己的最长相等真前后缀的长度。注意是真前后缀不能是它本身。手算过程i0子串a没有真前后缀next[0]0。i1子串ab前缀a后缀b不相等next[1]0。i2子串aba前缀有a、ab后缀有ba、a最长相等的是a长度1next[2]1。i3子串abac前后缀没有相等next[3]0。i4子串abaca前后缀a相等next[4]1。i5子串abacab前后缀ab相等长度2next[5]2。i6子串abacaba前缀aba和后缀aba相等长度3next[6]3。所以next数组为[0,0,1,0,1,2,3]。注意有些教材里next数组是另一种定义next[0] -1整体往后移一位爱奇艺的题目明确标注了next[i]定义为最长相等前后缀长度所以千万要先看题目定义再算不要直接套自己背的版本。这道题真正的坑在于很多人不是不会算而是算到i6的时候容易想当然写1。我当时提醒自己abacaba这个串很有迷惑性最长相等前后缀是aba长度3不是a长度1。可以这样说如果你在纸上完整把每个i的前后缀都列一遍永远不会错。2.2 快排变体Top K不一定要用堆A卷的编程题第一道我印象里是一道Top K的变体给一个无序数组找出第K大的数。这个题最容易的解法是排序后直接按下标取时间复杂度O(n log n)。但如果笔试的时间限制比较紧考的就是你会不会用快速选择Quick Select做到平均O(n)。思路其实很简单快排的partition每次能把一个元素放到最终位置如果这个位置恰好等于n-K那它就是第K大。如果目标位置在左侧就只递归左侧在右侧就只递归右侧。这就是快速选择的核心理念——不需要把整个数组排完。参考代码Cint partition(vectorint nums, int l, int r) { int pivot nums[r]; int i l; for (int j l; j r; j) { if (nums[j] pivot) { swap(nums[i], nums[j]); i; } } swap(nums[i], nums[r]); return i; } int quickSelect(vectorint nums, int l, int r, int k) { if (l r) return nums[l]; int pos partition(nums, l, r); if (pos k) return nums[pos]; else if (pos k) return quickSelect(nums, pos 1, r, k); else return quickSelect(nums, l, pos - 1, k); } int findKthLargest(vectorint nums, int k) { return quickSelect(nums, 0, nums.size() - 1, k - 1); }这里我用了降序partition这样第K大就是下标k-1语义清晰一点。工程上如果数据量极大、内存放不下堆才是正解。但在笔试这道题的情境里Quick Select是更优的答案因为平均O(n)比堆的O(n log k)快而且代码量也差不多。2.3 排序稳定性选择题里最爱埋伏笔选择题里有一道关于排序稳定性的判断题。稳定排序的含义是如果两个元素相等排序后它们的相对顺序不变。插入排序、冒泡排序、归并排序、基数排序是稳定的选择排序、快速排序、堆排序是不稳定的。爱奇艺考察的方式很狡猾它不直接问哪些是稳定的而是给你一个场景——比如按成绩排序成绩相同按学号排现在要求先按学号排好再按成绩排一次问用哪个排序能保证成绩相同的人仍然按学号顺序输出。答案是稳定排序如归并排序如果你错点了快排整道题就没了。这类题给我最大的感受是算法基础不是背结论而是要能在具体场景里灵活调用。稳定性这个概念看起来简单但真正用的时候很容易忽略。3. 贪心、DP与搜索笔试的胜负手3.1 贪心题先证明后编码第二道编程题我印象里是一道区间调度变体给定一组区间求最多能选出多少个互不重叠的区间。这道题有经典的贪心解法按区间右端点升序排序然后从左到右遍历只要当前区间的左端点不小于上一个选中区间的右端点就选择它。网上很多人直接背结论但笔试如果只写代码不写证明分数会打折扣。爱奇艺的评分标准里有思路正确性这一项所以我在答题时把贪心策略的依据简单写了一下选择右端点最小的区间能给剩余区间留下最大的空间因此最终选出的区间数一定最多。这是一个典型的贪心选择性质证明思路。参考代码Python简洁版def max_non_overlapping(intervals): intervals.sort(keylambda x: x[1]) end float(-inf) count 0 for l, r in intervals: if l end: count 1 end r return count边界条件区间为空返回0区间端点相接l end视为不重叠这个在题目里一般会说明如果不说明默认相接算不重叠。3.2 动态规划状态定义是灵魂选择题里有一道经典的DP题问的是对于一个长度为n的数组求最长上升子序列的长度。这道题最直观的做法是O(n^2)的DP状态dp[i]表示以nums[i]结尾的最长上升子序列长度。递推式是dp[i] max(dp[j] 1)其中 j i 且 nums[j] nums[i]。但爱奇艺在这道题的选项里埋了一个陷阱它问如何优化到O(n log n)。如果你只知道O(n^2)的DP这个选择题就得靠猜了。O(n log n)的做法是维护一个tail数组tail[len]表示长度为len的上升子序列的最小结尾元素。遍历每个元素时在tail数组里二分找第一个大于等于当前元素的位置替换它。这实际上是贪心加二分不是传统DP。不过由于题目出现在选择题里更多考察的是你是否听说过这个优化而不要求现场写代码。我建议准备面试时一定要把O(n log n)版本的原理和代码都吃透因为面试官很喜欢拿这个题做层层递进。3.3 搜索剪枝与进化算法拓展知识也是踩分点A卷的简答题里有一道让我印象很深的题问在组合优化问题中为什么启发式算法如粒子群算法、模拟退火算法在工程中仍然被广泛使用它和精确算法相比优缺点是什么这道题对很多只刷LeetCode的同学来说有点措手不及因为平时接触的算法题目都有确定性解很少想到NP难问题。但爱奇艺有大量调度、排班、带宽分配这类工程优化场景穷举不可行所以启发式算法在工程里很有价值。我的答题思路是精确算法如分支定界、动态规划能保证找到全局最优解但状态空间过大时时间成本不可接受启发式算法不保证全局最优但能在可接受时间内给出一个满意解粒子群算法本身不复杂它的核心是个体学习群体协作每个粒子根据自身历史最优和全局历史最优更新速度和位置工程中容易并行化适应度函数可随意定制。这道题提醒了我一个重要的备战方向不要只盯着力扣刷题机器学习、优化算法的基础概念也需要定期复习尤其是跟业务场景结合的部分。4. 机器学习与深度学习理论这类笔试的隐形大头4.1 从LR到Softmax损失函数必须手推爱奇艺A卷的简答题第二道我记得是让写出逻辑回归LR的损失函数并推导其梯度。这道题看起来基础但每年都能刷掉一大批人因为很多人会写损失函数的形式却推不对梯度。逻辑回归的损失函数是交叉熵形式对于单个样本(x, y)L -[y * log(p) (1 - y) * log(1 - p)]其中 p 1 / (1 exp(-w^T x))也就是sigmoid函数。推导梯度的关键在于一个性质sigmoid函数的导数满足 p p(1-p)。利用链式法则对w求导最终可以得到∂L/∂w (p - y) * x这个形式非常优美意味着梯度的更新方向就是预测值与真实值的误差乘以特征向量。我当时在答案里特意写了这一步化简过程因为批改老师最看重的是你懂不懂这个数学变换而不是死记公式。多选题里也有一个考点softmax交叉熵损失对logits的梯度。结论是 y_pred - y_onehot也就是预测概率减去one-hot标签。这两个结论建议一起记因为面试里经常连着问。4.2 BatchNorm与Dropout训练和预测的不一致选择题里考了一道深度学习中很经典的问题BatchNorm在训练阶段和测试阶段的行为有什么区别Dropout在预测阶段为什么要关闭这两个问题考察的是同一个核心概念训练时的随机性和推理时的确定性。BatchNorm在训练时用当前mini-batch的均值和方差来归一化同时维护全局的running_mean和running_var供测试时使用。这是因为训练时小批量统计本身有正则化效果而测试阶段如果也依赖batch统计单条样本预测时batch大小可能是1结果会极不稳定。Dropout同理训练时随机丢弃神经元是为了防止过拟合但推理时如果还随机丢弃模型输出就有随机性所以需要乘以keep_prob或者用Inverted Dropout做缩放保证输出期望一致。这一题在爱奇艺的卷子里出现也从侧面说明视频推荐模型的训练和线上推理链路很看重这种细节候选人如果连训练和推理的不一致都搞不清楚大概率是缺乏真实模型部署经验的。4.3 评估指标不要只会精确率和召回率还有一道选择题是关于推荐系统评估指标的在Top-K推荐场景下除了精确率和召回率还有哪些常用指标选项里有AUC、NDCG、MAP、F1等。正确答案是NDCG和MAP这两个指标都是位置敏感的——排在越前面的正确推荐得分越高。AUC更多用于二分类的整体排序能力评估而推荐列表通常更关注前几个结果准不准。这类题其实考的是你对业务场景的理解。单纯做分类模型精确率和召回率就够用但推荐系统是列表排序逻辑评判的是排序质量这时候位置加权指标才是核心。如果你没有做过推荐相关项目这一点很容易踩坑。5. 考场上的真实教训时间分配与失分点复盘5.1 时间分配一道题卡超过18分钟就果断跳我考这套A卷时最大的教训来自一道选择题。那道题考察的是红黑树的插入调整四个选项看起来很接近我花了大概十分钟去推断最后选了一个不太确定的答案。事后回想这道题最多值两分但消耗的时间足够我再检查一遍编程题的边界条件。后来我给自己定的规矩是选择题平均不超过两分钟超过18分钟还没思路的编程题就先跳过把能拿的分全部拿到再说。笔试不是让你证明自己能力多强而是在有限时间内拿到最高的总分。提示牛客网的笔试界面有题目列表和进度条做完一题就随手标记别到最后才发现有题漏做了。5.2 编码规范与边界条件失分重灾区编程题最容易失分的三个地方按我亲身经历排序边界条件数组为空、数组长度为1、K等于1或等于n数据类型数组元素可能很大用int会溢出应该用long long输出格式比如要求输出一行每个数字后面有空格最后一个数字不能有空格。我当时第二道区间题差点在空数组上翻车因为Quick Select的代码里没有判断nums为空的情况。虽然测试用例可能不覆盖空输入但这种防御性编程的意识是笔试评分的一部分写完代码一定要花两分钟自测边界。5.3 考后复盘把每一道题都当成面试题准备笔试结束不是终点而是面试准备的起点。我习惯把笔试中拿不准的每一道题都记录下来当天晚上就查资料弄懂因为面试官很可能从笔试题目里挑几道追问。比如我对KMP的next数组推导过程不熟悉笔试结束后我专门手推了十几个模式串的next数组后来面试官真的追问了KMP在字符串匹配中的失配处理方式我因为复盘过所以答得很流畅。复盘时除了确认正确答案更要复现整个推理路径。一个很好的练习方法是周末抽时间把自己当作老师把这套题的每题思路给虚拟学生讲一遍。讲得清楚才是真的掌握了。6. 对准备秋招的几点实在建议如果你现在正在准备算法岗秋招我的核心建议浓缩成三句话基础算法题要练到条件反射机器学习理论要能手推公式工程细节边界条件、复杂度、训练推理差异要比别人多想一步。具体来说LeetCode上按标签刷题时动态规划、贪心、二分、KMP、Top K这几类是爱奇艺这类视频平台的题库里出现频率最高的机器学习方面务必吃透LR、Softmax、SVM的对偶形式、决策树分裂条件、集成学习GBDT/XGBoost的基本原理并会推导它们的损失函数和梯度深度学习的面试题BatchNorm、Dropout、CNN参数量计算、RNN梯度消失这四类几乎必考。爱奇艺A卷这套题说难也不难但它是很好的基础能力体检表。你能不能在限定时间内稳定输出这些基本功直接决定了笔试能不能过关。我的建议是把每一道做错的题都当成交学费认真复盘因为它们很可能就是你下一场面试的面试题来源。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价