
1. 算法岗笔试的底层逻辑它在筛选什么又该如何投喂每年春招算法岗都是竞争最激烈的赛道之一。2024年联想春招算法岗的笔试我从准备阶段到实际答题最大的感受是这场考试的核心并不在于你“背了多少道题”而在于你能否在有限时间内把算法思维、工程习惯和理论基础有序地组织起来输出成可运行的代码和清晰的逻辑表达。先说结论算法岗笔试筛的不是“最聪明的人”而是“最稳定、最能沟通、最能把想法落地的人”。这听起来可能和很多人的认知不同——大家普遍觉得大厂笔试就是LeetCode高难度题目的比拼。而实际接触下来联想的笔试题目风格更偏向“综合能力验证”一部分是数据结构与算法的基础题一部分是机器学习/深度学习领域的概念题与推导题还有一部分是结合业务场景的分析题。它希望看到的是你具备完整的知识体系而不是刷题刷出来的局部最优解。从去年秋招到今年春招我面过不少互联网公司和硬件厂商的算法岗联想的笔试算是比较有代表性的“中规中矩型”——难度不一定是最高的但覆盖面一定是最广的。它不会让你只写一个单调栈或线段树的模板而是会问“KMP算法里next数组的含义是什么”“排序算法在特定数据分布下的表现差异”“某个推荐场景下该用什么召回策略”这类把理论和实践缝合在一起的问题。所以准备这场笔试首先要改变一个心态这不是一场“刷题比赛”而是一场“知识体系体检”。刷题当然要刷但更重要的是把每一类算法背后的原理、适用边界、复杂度来源、工程实现细节都梳理清楚。这样一来无论题目穿什么马甲你都能认出它的本质。在接下来的内容里我会按笔试实际涉及的核心模块逐一展开——数据结构与基础算法的高频考点怎么拆解、机器学习与深度学习算法会考到什么深度、笔试现场的时间分配策略如何制定以及复盘时哪些坑是最值得注意的。这些都是我亲身踩过、验证过、总结过的操作路线可以直接拿来用。2. 数据结构与经典算法高频考点从KMP到排序命题人到底想考你什么算法岗笔试的数据结构部分说穿了就是“数组、链表、树、图、字符串、哈希”这几大件的排列组合。但我观察到一个明显的趋势命题人越来越不喜欢让你直接背模板而是喜欢把经典算法“改装”成带有业务背景的变体题。比如同样考KMP它不会直接问你“请实现KMP”而是给你一段模式串让你写出next数组或者让你分析在某个特定文本串上KMP的匹配过程。2.1 字符串算法KMP的next数组不是一个记忆题而是一个理解题2024年春招的热搜词里“在kmp算法中对于模式串p‘abacaba’其next数组”这类问题频繁出现。这绝不是偶然——字符串匹配算法是笔试中最适合“出活题”的知识点之一因为它既有清晰的逻辑框架又容易在细节上设置陷阱。先说next数组的定义。对模式串pnext[i]表示“p[0..i]这个子串中最长相等前后缀的长度注意这里的定义因教材而异有的版本定义为长度减一有的直接定义为长度答题前先看清楚题干的定义”。以我们日常使用的定义为例对模式串abacaba来说我们先手动推导一遍。next[0]只有一个字符a没有真前后缀长度为0。next[1]子串ab前缀集合{a}后缀集合{b}无交集长度0。next[2]子串aba前缀{a,ab}后缀{ba,a}最长公共前后缀是a长度1。next[3]子串abac前缀{a,ab,aba}后缀{bac,ac,c}无交集长度0。next[4]子串abaca前缀{a,ab,aba,abac}后缀{baca,aca,ca,a}最长公共前后缀a长度1。next[5]子串abacab前缀{a,ab,aba,abac,abaca}后缀{bacab,acab,cab,ab,b}最长公共前后缀ab长度2。next[6]子串abacaba前缀{a,ab,aba,abac,abaca,abacab}后缀{bacaba,acaba,caba,aba,ba,a}最长公共前后缀aba长度3。所以next数组是[0,0,1,0,1,2,3]。这里要注意一个笔试中特别容易失分的点很多版本的教材会把next数组定义为“最长相等前后缀中前缀的末位下标”也就是把上面这个数组统一减一变成[-1,0,0,-1,0,1,2]。如果你平时刷题用的模板和题目标准答案用的定义不一致就会导致推导结果全错。我的建议是答题时先写出你使用的next定义再基于这个定义完成推导这样即便和阅卷标准有偏差至少逻辑链是完整的。2.2 排序算法不能只会背复杂度要会讲“在什么场景下谁更好”“排序算法”在热搜词里出现频率极高冒泡排序、堆排序、快速排序、归并排序几乎是每年必考。但2024年的笔试题明显倾向于“场景化提问”——例如给出一个几乎有序的数组问哪种排序表现最优或者给出一个内存受限的环境问外部排序如何设计。先列一个高频考点对照表方便直接记忆排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性关键特性冒泡排序O(n²)O(n²)O(1)稳定对几乎有序数据友好可加提前退出快速排序O(n log n)O(n²)O(log n)不稳定工程最常用但需注意基准选择归并排序O(n log n)O(n log n)O(n)稳定适合外部排序、链表排序堆排序O(n log n)O(n log n)O(1)不稳定适合求TopK不适合缓存友好场景插入排序O(n²)O(n²)O(1)稳定对“几乎有序”的数组非常快O(n)级别命题人最喜欢的“陷阱”之一是快排的最坏情况。很多人背了“快排平均O(n log n)”却忽略了一个关键细节当基准选择不当比如固定选第一个元素而数据刚好有序时快排会退化成O(n²)。更严重的是递归深度会变成n栈溢出风险很高。所以工程上通常采用“三数取中”或“随机基准”来规避这种退化笔试中如果让你手写快排记得在基准选择上做文章这一下就能和其他人拉开差距。另一个高频问法是“什么样的排序算法是稳定的稳定和不稳定在实际场景中有什么影响”。这背后其实是在考查你对排序“业务语义”的理解。比如先按姓名排序再按年龄排序如果排序算法不稳定第二轮的排序会打乱第一轮的结果导致最终名单出现同年龄段内姓名乱序的情况。这种问题没有直接考你代码但比考代码更难——它考的是你是否真的理解排序过程的内部机制。2.3 贪心、模拟退火与粒子群从经典到启发式岗位差异决定了考题侧重笔试题里“贪心算法”“模拟退火算法”“粒子群算法原理”这些热搜词的出现频率说明算法岗笔试已经不局限于传统数据结构题了。联想作为一家同时做硬件、软件、AI解决方案的公司其算法岗分布很广——有的团队做图像、有的做推荐、有的做控制优化。不同方向的团队笔试侧重点会有所不同但启发式算法通常是“通用必考项”。贪心算法考的不是定义而是“如何证明贪心策略的正确性”。最典型的例子是区间调度问题给定若干区间选择尽可能多的互不重叠的区间。贪心策略是按区间右端点升序排列依次选择与前一个已选区间不重叠的区间。笔试中如果只写出这个策略只能拿一半分另一半分数在于证明“为什么按右端点排序是最优的”——对任意一个最优解如果它的第一个区间不是右端点最早的区间我们可以用右端点更早的区间替换它替换后剩余空间只会变大不会变小因此存在一个以“右端点最早区间”开头的最优解由此归纳可知贪心策略正确。粒子群算法和模拟退火这类启发式算法笔试一般不会让你完整实现但会考察你对“核心机制”的理解。粒子群算法的关键是“个体认知”和“群体社会”两个分量之间的平衡——每次迭代中粒子的速度更新公式里c₁乘以个体最优和当前位置的差c₂乘以全局最优和当前位置的差这两个系数决定了粒子的探索能力和开发能力。模拟退火的核心则是Metropolis准则以一定概率接受比当前解更差的解且这个概率随温度下降而减小从而避免陷入局部最优。说实话这类题对大部分人来说就是“背概念题”但如果你能围绕“探索与开发的权衡”这一核心矛盾来回答会让阅卷人觉得你真的用过这些算法而不是考前突击背的。2.4 树与图堆排序、Dijkstra、二分图高频数据结构题型的应对公式树和图是算法岗笔试的“硬骨头”。结合热搜词来看Dijkstra算法、二分图HK算法、Kahn算法拓扑排序、堆排序等是高频考察点。Dijkstra算法考察的关键是“优先队列优化”和“负权边陷阱”。很多基础不牢的同学会把Dijkstra和BFS混为一谈。区别在于BFS基于队列保证逐层扩散适用于无权图Dijkstra基于优先队列最小堆每次弹出当前距离最短的节点适用于非负权图。如果在有负权边的图上使用Dijkstra会因为“贪心策略”失效而出错——因为当前距离最短的节点并不一定是全局最优路径上的中间节点。这点笔试中经常以“判断题”或“找错题”的形式出现。二分图匹配的HK算法Hopcroft-Karp算法在热搜词中出现说明命题人开始把一些“竞赛级”算法纳入考纲。HK算法的核心思想是通过BFS构建分层图再用DFS寻找多条不相交的增广路从而把匈牙利算法的O(V×E)优化到O(E√V)。笔试中如果考到这个大概率不是让你完整实现而是考察“与朴素匈牙利算法的区别”以及“为什么能加速”。回答时抓住两条要点即可一是BFS分层减少了无效增广路的搜索次数二是多路增广使得每一轮可以处理多条增广路减少了总的增广轮次。Kahn算法是拓扑排序的经典实现它的本质是“反复删除入度为0的节点”。很多人在笔试中会写这个算法但容易忽略一个细节拓扑排序要求图是有向无环图DAG如果图中存在环Kahn算法结束后访问到的节点数会少于总节点数。所以判断“是否存在拓扑排序”就是判断“是否有环”而判断有环除了可以用拓扑排序还可以用DFS三色标记法。笔试中如果给你一个带环的图让你做拓扑排序一定记得先说明“该图有环无法完成拓扑排序”这是一个非常重要的采分点。3. 机器学习与深度学习笔试考点原理推导远比“会调包”重要2024年算法岗笔试的另一个明显变化是机器学习和深度学习的内容比重显著上升。热搜词里“机器学习算法”“深度学习算法”“聚类算法”“KNN算法”等频频出现这并不是偶然——随着AIGC和大模型的热度持续攀升算法岗对理论基础的要求明显加强了。3.1 必备考点地图从经典ML到深度模型哪些内容必须滚瓜烂熟我梳理了一份算法岗笔试中机器学习部分的“高频考点地图”按优先级排列如下优先级知识点常见考法高聚类算法K-Means、DBSCAN、层次聚类手推K-Means迭代过程解释DBSCAN的密度可达与密度相连高KNN算法K值选择、距离度量、KD树加速原理、维度灾难高逻辑回归与Softmax交叉熵损失推导、梯度下降更新公式中决策树与集成学习信息增益、基尼系数、随机森林与梯度提升树的区别中支持向量机最大间隔、拉格朗日对偶、核函数原理中贝叶斯与概率图朴素贝叶斯的独立性假设、极大似然估计低降维算法PCA、LDA特征值分解与奇异值分解的关系、主成分的几何意义KNN算法是热搜词中一个非常有意思的点。它看起来简单但笔试可以考得很深。第一层考法K值的选择对分类边界的影响K太小容易过拟合噪声影响大K太大容易欠拟合把远处的样本也纳入决策。第二层考法曼哈顿距离、欧氏距离、余弦相似度等不同度量在不同场景下的选择理由。第三层考法KD树的构建与搜索过程——这是很多人的知识盲区因为平时用sklearn直接调包根本不会去关心加速原理。但笔试命题人深知“只会调包”的人遇到海量数据时是束手无策的所以KD树这类“加速手段”反而成了区分度很高的考点。聚类算法也是重头戏。K-Means这个算法几乎所有学过ML的人都知道但能一字不差写出完整迭代步骤的人不多“随机初始化K个质心→计算每个样本到各质心的距离→归入最近簇→重新计算各簇均值作为新质心→重复直到收敛”。笔试还喜欢考K-Means的两个致命弱点一是对初始质心敏感可以用K-Means解决二是对离群点敏感因为均值会被极端值拉偏所以又有K-Medoids这类变体。DBSCAN则喜欢考“三要素”邻域半径ε、最小样本数MinPts、核心点/边界点/噪声点的定义。它和K-Means最大的区别在于“不需要提前指定簇数量且能识别噪声点”这一点在业务场景中非常有价值。深度学习部分面试官最常考的是反向传播的推导。比如给你一个两层的全连接网络损失函数为交叉熵激活函数为Sigmoid要求你写出w₁和w₂的梯度更新公式。这属于“手推梯度”的基础题目却不能掉以轻心——很多人能口头说出“链式法则”但真正下手推导时经常在维度匹配上出错。一个非常实用的自查方法反向传播过程中每一步梯度的维度必须和对应参数的维度完全一致。如果推导出来的梯度维度对不上那一定是哪里算错了。3.2 KL散度与ELBO、BM25、卡尔曼滤波笔试题里的“跨界选手”热搜词里出现了很多“非典型”算法名词——“kl elbo 算法原理详解”“bm25算法”“卡尔曼滤波算法”“pid算法”。这些词汇出现在春招笔试热搜中说明命题人正在有意识地考查“领域广度”。KL散度与ELBO是变分推断Variational Inference的核心概念在深度生成模型如VAE中占据基础地位。笔试一般不会让你完整推导变分下界但会考察你对直觉的把握KL散度度量两个分布之间的差异但它不是一个对称的度量也就是说KL(P‖Q) ≠ KL(Q‖P)因此它不能算作严格的“距离”。ELBOEvidence Lower Bound的逻辑是直接最大化对数似然log p(x)很困难于是我们转而最大化一个它的下界——ELBO E[log p(x,z) - log q(z)]等价于“最大化重建似然同时最小化后验分布q(z)与先验p(z)的KL散度”。能这样把概念讲清楚并指出“VAE的本质就是同时优化重建损失和KL散度”这道题基本就稳了。BM25算法乍一看像是纯文本检索领域的东西与算法岗笔试似乎有点远。但联想作为一家有大量搜索、推荐、文档处理业务的厂商考核BM25其实是在考察“信息检索基础”。BM25的核心思想是对查询中的每个词项计算其与文档的相关性得分然后加权求和。它有两个关键设计一是词频的饱和效应词频越高边际收益递减用k₁参数控制二是文档长度的归一化长文档中的词频更“稀释”用b参数控制。如果笔试中让你解释BM25和TF-IDF的区别核心回答方向是TF-IDF只有“词频×逆文档频率”的线性组合而BM25引入了词频饱和与长度归一化对长文档和短文档的公平性更好。卡尔曼滤波和PID算法则偏向控制领域。联想有大量的硬件产品和物联网设备控制算法岗位中这些概念几乎是必考的。卡尔曼滤波的关键在于“预测-更新”两个步骤的交替预测阶段利用状态转移方程估计先验状态和先验协方差更新阶段利用观测值计算卡尔曼增益然后修正后验状态和后验协方差。笔试如果考卡尔曼滤波大概率会考两个点一是“卡尔曼增益K为什么是那个形式”——它本质上是先验误差和观测误差的“加权比”谁的误差小谁就在最终估计中占据更大的权重二是“卡尔曼滤波和普通低通滤波器的区别”——卡尔曼滤波是自适应的它能根据系统模型的噪声特性和观测噪声特性动态调整权重。3.3 规则引擎Rete算法和异常检测联想场景里的业务向考察点热搜词里还有两个非常“联想特色”的算法规则引擎Drools的Rete算法以及工业异常检测算法。这两个词大概率能反映笔试命题人的行业偏好。Rete算法是规则引擎的核心它的思想是“利用规则的结构相似性共享条件判断的中间结果”。举一个非常生活化的例子你要判断一个学生是否“优秀”规则条件是“成绩90且出勤率95%”再判断他是否“合格”条件是“成绩80且出勤率85%”。如果逐条规则执行两条规则都要分别遍历所有学生最坏情况是O(规则数×学生数)。Rete算法的方案是把“成绩”和“出勤率”的检查拆成独立的节点先对所有学生做一次成绩过滤再把结果作为共享输入传给两个规则。这样“成绩80”这个子判断只需做一次结果可以复用在两条规则中。Rete算法的核心价值在于“把重复的子判断合并”这在规则数量庞大成百上千条的复杂业务中能带来数量级的性能提升。工业异常检测算法则是联想这样的硬件厂商非常关注的领域。比如屏幕面板检测、PCB板缺陷识别、设备预测性维护等场景中异常检测的目标是从大量正常样本中发现“异常模式”。高频考点包括基于重构误差的方法自编码器在正常样本上训练异常样本的重构误差较大、基于距离的方法如KNN距离、孤立森林、基于分布的方法如高斯混合模型。笔试中如果给你一个“标注数据极少、正常样本极多”的场景让你设计异常检测方案正确的思路是先从无监督方法入手自编码器、孤立森林再考虑弱监督和半监督方法的结合。这背后体现的是对“数据分布不对称”这一业务本质的判断。4. 笔试现场的实战策略从读题到提交如何把会做的题全部稳稳拿下理论知识储备到位后笔试现场的执行策略就变得至关重要。很多同学不是“不会做”而是“会做却没拿分”——要么时间分配失衡要么代码细节出错要么题目理解偏差。根据我的实战经验下面这几条是在线笔试的“保分底线”。4.1 先做“会做的”再做“能蒙的”最后碰“不会的”算法岗笔试通常包含选择题、简答题、编程题。我强烈建议的顺序是先快速浏览全部题目把每道题的“难度感知”记录在草稿纸上然后按“会做→可能做→完全不会”三档分组作答。先说为什么不能按题目顺序做。有一次我参加某大厂笔试第一道编程题就是一道非常复杂的动态规划我在上面耗了40分钟勉强通过了一半的测试用例结果后面两道中等难度的题目因为时间不够只能匆匆收尾白白丢了稳定的分数。后来我调整了策略拿到题先快速分类会做的直接做不会的标记好等所有“有把握的分”拿到手之后再回头攻坚难题。这套策略的核心逻辑是笔试的通过与否取决于“总分”而不是“单一题目的满分”。先把确定的分保住再拿不确定的分拼一下是收益最大化的策略。选择题和填空题往往是“性价比”最高的部分——它们不需要写完整代码只要对知识点有印象就能得分。所以我会优先把选择填空快速过一遍因为它们通常考验的是“知识的广度”而非“深度”扫一眼能一眼定答案的就直接选不能立刻确定的先标记不要在一道选择题上卡超过90秒。4.2 编程题代码模板化把高频套路固化成潜意识反应算法岗笔试中的编程题虽然题目千变万化但底层的高频套路其实非常有限。我整理了几套“肌肉记忆模板”建议在笔试前反复默写练习直到能在5分钟内无差错输出。第一套是二分查找模板。这个模板的陷阱在于边界条件的处理。我的固定写法是def binary_search(nums, target): left, right 0, len(nums) - 1 while left right: mid (left right) // 2 if nums[mid] target: return mid elif nums[mid] target: left mid 1 else: right mid - 1 return -1注意这里用的是left right而不是left right因为前者对应的是“闭区间”搜索当left和right重合时mid指向的那个元素尚未被检查所以必须用。如果你不小心写成left right那当目标值恰好位于leftrightmid的位置时就会返回-1造成隐性的边界错误。第二套是快速幂模板。快速幂算法在热搜词里出现频率很高它在处理大数取模运算时几乎是必杀技。def fast_pow(base, exp, mod): result 1 base % mod while exp 0: if exp 1: result (result * base) % mod base (base * base) % mod exp 1 return result这套模板的逻辑核心是“二进制分解指数”。比如计算3¹⁰10的二进制是1010也就是3¹⁰ 3⁸ × 3²。代码中通过不断平方底数base base²来获得3²、3⁴、3⁸再根据指数的二进制位决定是否乘入结果。面试时如果考大数幂运算这套模板可以直接套用并且记得一边写一边解释“指数二进制展开”的思路这也是加分项。第三套是Dijkstra的优先队列实现。这个模板尤其要练熟因为它是图论题中出现频率最高的算法之一。import heapq def dijkstra(graph, start, n): dist [float(inf)] * n dist[start] 0 heap [(0, start)] while heap: d, u heapq.heappop(heap) if d dist[u]: continue for v, w in graph[u]: if dist[u] w dist[v]: dist[v] dist[u] w heapq.heappush(heap, (dist[v], v)) return dist注意第6行的if d dist[u]: continue非常关键——它用于跳过堆中过期的“脏数据”否则同一个节点可能被多次加入堆中导致时间复杂度的退化。这个细节很多教程不会讲但在笔试中如果不加最坏情况下可能会超时加上它就能确保O(E log V)的时间复杂度稳定成立。4.3 手推题和简答题的答题框架先讲结论再讲推导最后给边界简答题和手推题是算法岗笔试中拉开分数差距的重要部分。我总结了一个“三段式答题框架”可以适用于绝大多数理论题第一段直接给结论一句话说清楚“是什么”。例如题目问“贪心算法的适用条件是什么”你的第一句话应该是“贪心算法的适用条件是问题具有最优子结构性质和贪心选择性质”。这句话是采分点必须确保是正确的、精确的。第二段展开推导或原理说明。例如继续解释“最优子结构是指问题的最优解包含子问题的最优解贪心选择性质是指通过局部最优选择可以构造全局最优解”。这里可以用一个简单的例子辅助说明比如“找零钱问题中在硬币面额为1、5、10、25的情况下贪心策略总是有效的因为在这样的面额组合下任何一个最优解都可以表示为包含最大面额硬币的解”。第三段补充边界条件或反例。例如“但当硬币面额为1、3、4时贪心策略会失效——凑出6元的最优解是33而贪心会先选4再选11得到3枚硬币而非2枚”。这是展示你深度理解的关键段位也是阅卷人最容易认可的“亮点分”。这个框架最大的好处是让阅卷人在几秒钟内就能看到你的核心结论从而在“时间紧、任务重”的阅卷环境中迅速给你定档。如果第一段结论正确第二段推导基本合理第三段边界充分大概率能拿满这道题的分数。5. 复盘才是最关键的成长环节笔试后的错题挖掘与方法论沉淀笔试结束后很多人会陷入两种情绪一种是“题目好难我完蛋了”的消极内耗另一种是“考完了总算轻松了”的彻底放下。这两种状态都不可取。真正的成长始于笔试结束那一刻——复盘的价值在某种程度上比刷题本身更大。我自己在复盘时有一个原则不放过任何一道错题也不放过任何一道“蒙对”的题。错题意味着知识盲区蒙对的题则意味着“半懂不懂”的危险地带这两类都是必须补齐的缺口。5.1 错题归因分类法知识盲区、思维盲区、还是表达盲区复盘时我会把错题归因成三个类型不同类型对应不同的整改策略。第一类知识盲区——这个算法或知识点我压根没学过或者学过但已经完全遗忘。解决方案是重新学习该知识点并做至少5道同类题目巩固把该知识点的核心模板纳入自己的“肌肉记忆库”。第二类思维盲区——知识点我懂但题目换个说法我就认不出来了。这种情况最典型的是“包装题”把动态规划包装成“字符串编辑”把图论最短路径包装成“城市之间公交车换乘”。解决方案是建立“题目特征到算法类型的映射”例如看到“求最值且满足无后效性”就想到DP看到“有向无环图依赖关系”就想到拓扑排序。第三类表达盲区——我会做这道题但表述不够规范或者推导跳步太多导致阅卷人没看懂。这种情况常见于简答题和手推题。解决方案是把标准答案的表述方式抄写一遍模拟阅卷人的视角审视自己答题特别关注“结论是否前置”“推导是否连续”“关键词是否准确”。5.2 从春招笔试反推秋招策略笔试只是入口能力和项目才是护城河复盘完错题后建议再做一步“战略升级”——把这个过程沉淀成一份适合自己的“算法岗知识体系图谱”。我的做法是准备一个在线笔记或者本地Markdown文件按“数据结构”“基础算法”“机器学习”“深度学习”“领域算法”“工程能力”六个板块分章节记录。每个知识点记录五要素核心定义、时间复杂度/空间复杂度、典型应用场景、代码模板、易错点。这份笔记不只是为了春招更是为后续秋招、日常面试做准备。2024年春招的过程让我深刻明白了一个道理算法岗面试虽然会考算法题但最终决定你能否拿到Offer的是“算法基本功项目深度领域理解”这三个维度的综合实力。笔试只是入口关进入面试后面试官会更关注你在项目中的角色、你如何定义问题、如何选择方案、如何权衡利弊、如何落地实施。而这些恰恰不是靠突击刷题能补出来的而是靠长期的项目积累和深度思考慢慢沉淀出来的。所以如果你现在正处于春招或秋招准备期我的建议是笔试备考要“以点带面”既要把具体的算法模板吃透也要时刻把问题和业务场景联系在一起。做完一道题多问自己一句这个算法在真实业务中会用在哪儿有没有更好的替代方案如果数据规模扩大十倍这个算法还能扛得住吗这些问题想多了你的技术视野和表达深度自然就和单纯刷题的人拉开了差距。