ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

华为OD机考C卷实战指南:算法考点、双机位布置与刷题策略

华为OD机考C卷实战指南:算法考点、双机位布置与刷题策略 先聊点实际的。华为OD机试这个环节刷掉的人远比面试环节多。很多人简历过了、HR约了考试时间结果上考场一看C卷三道题心态直接崩了。尤其是最近C卷逐步铺开双机位监考成为标配题量和难度都比以前更卷。作为一个带过不少人过机试、自己也反复刷过OD题库的老兵这篇东西不整虚的把C卷要怎么准备、双机位怎么摆、算法怎么复习、代码怎么写才能拿高分、OJ去哪刷全部按实操来一遍。先按惯例给个定义华为OD机考C卷是华为研发类外聘岗位OD就是Outsourcing Developer外包研发岗技术面试前的线上机试环节考试环境为双机位视频监控C卷是目前正在大量使用的一套题库版本。考试一般三道算法题总分因人因批次略有差异但通过线大差不差核心考察的是你“用代码解决业务问题的能力”——说白了就是算法题能不能写出来、写对、写得快。这篇文章适合三类人看第一类是完全没接触过华为OD机试的萌新看完整个人就对流程、规则、考什么心里有底了第二类是刷了一些题但没方向的人照着考点分类去补效率高很多第三类是马上要考试、在纠结双机位怎么弄和代码怎么写才能不被扣分的人直接跳到对应章节抄作业就行。1. 华为OD机考C卷整体认知1.1 C卷到底是什么和A/B/D卷有什么区别最早华为OD机试分A卷、B卷后来题库迭代出了C卷、D卷。实际区别很简单题目来源不同难度略有调整但核心考点都是算法与数据结构。C卷目前在用的比例很高很多城市、很多部门的OD岗约考都直接落到C卷。具体到一场考试通常是三道题第一题偏简单考字符串处理、数组操作、简单模拟第二题中等常见的有滑动窗口、双指针、二分、前缀和、贪心第三题偏难大概率是动态规划、DFS/BFS、图论、状态压缩这类。分值配比一般是100分、200分、300分总分600不同批次可能有微调以你收到的考试通知为准。通过线一般看当天批次有的是150分过有的是160分过。注意一个事实第三题300分往往决定了你能不能进下一轮。为什么因为前两题很多人能拿满拉不开差距第三题才是分水岭。1.2 双机位监考规则和审查要点C卷的监考是“双机位”一个电脑摄像头机位一个手机或平板侧后方机位。两个机位都要在开考前调整好并且在整个考试过程中不允许离开画面。具体规则建议以邮件/短信通知为准但实操中普遍要求以下几点电脑机位始终能看到考生正脸、上半身、双手和屏幕。画面里不能出现其他人和电子设备。手机机位放在考生侧后方的位置一般是右后方45度左右高度比桌面略高一点俯拍视角覆盖考试桌面、电脑屏幕和手部动作。手机关闭声音、关闭消息通知、屏幕常亮放在手机支架上固定好全程不碰。有一点容易被忽略手机机位一定要提前一天找好支架和角度。很多人开考前半小时才手忙脚乱地找手机支架、调位置结果要么照不到屏幕、要么角度太高看不清手有的直接因为机位不合格被取消资格。别问我怎么知道的我见到过不止一个。1.3 考试环境与做题方式考试平台一般在牛客网华为OD专区进行直接就在浏览器里写代码、跑测试用例。支持的主流语言是C、Java、Python、Go等看岗位要求和个人熟悉的语言即可。我个人的强烈建议如果允许选Python优先选Python。原因后面在“高分实现”部分细说。考试过程中是不能切到其它网页查资料的。双机位监考会盯着你的屏幕浏览器切屏记录会被系统捕捉严重的话直接判作弊。所以备考时就要养成“不查资料、纯手写”的习惯。平时刷题也别边查边写不然考场会原形毕露。2. 算法考点分类拆解与复习重点2.1 考点地图按优先级排序把所有C卷可能考到的知识点排个队按照“必考”“常考”“偶尔考”三个档次来分类。以下是我根据大量题单和考试反馈整理的分类优先级考点说明必考字符串处理、数组操作、模拟题第一题基本就是这个范围简单但容易粗心丢分必考双指针、滑动窗口第二题高频字符串或数组题里经常用必考贪心算法第二题常客找规律题居多常考动态规划第三题主力背包、最长子序列、区间DP都是热点常考DFS、BFS网格类、图遍历类题目手写模板要非常熟常考二分查找单独出题或嵌套在其它题里常考前缀和、差分数组区间操作类题目的“免死金牌”偶尔考并查集、拓扑排序、最短路径图论方向不会专门考太深但模板要会偶尔考哈希表、栈、队列、堆基础数据结构主要配合其它考点使用偶尔考数学题、位运算出现频率不算高但碰到了就是送分或送命很多人复习时最常见的问题就是“东刷一道西刷一道”没有按考点来。比如今天刷了个DP明天刷了个字符串后天又去碰图论结果哪个都不精。正确的做法是按考点一块一块地过每块花2到3天集中刷直到这个考点下的题看到就有思路。2.2 第一题字符串处理与模拟最不该丢的分第一题难度不大但失分率却很高。为什么因为这类题考的往往不是算法而是细心。比如日期格式转换、IP地址校验、字符串切割排序、正则匹配替换、简单加密解密、表达式求值简化版。举个典型的例子给你一行逗号分隔的字符串要求按指定规则排序后输出。看起来很简单但坑在于字符串里可能有连续逗号、可能首尾有空格、可能同一行数据量很大。如果你直接用split(,)然后就去排序很容易把空字符串也算进去结果和预期输出不一致。考场上一旦第一题没AC心态就会受到不小的影响。实操建议输入读取用sys.stdin.readline()而不是input()——在处理大规模输入时性能差别很大机考大数据用例超时是常见挂法。输出前把格式看清楚多余空格、换行符都算错。字符串题先写一遍暴力解法拿住基础分再考虑优化。2.3 第二题双指针、滑动窗口与贪心靠模板拿分第二题的题型相对固定掌握了“三板斧”基本能应付大部分题。双指针的经典场景有序数组找两数之和、去重、区间合并。套路就是左指针和右指针分别从两端往中间走或快慢指针一个跑得快一个跑得慢。滑动窗口的经典场景最长无重复子串、长度最小的子数组、字符串排列匹配。核心是用一个字典或数组维护窗口内元素的出现次数右指针扩、左指针收时间复杂度从暴力法的O(n²)降到O(n)。贪心的经典场景区间调度、跳跃游戏、分发饼干、加油站。核心是“局部最优是否能推全局最优”这个需要多做题找感觉。C卷里贪心题往往藏得比较深表面上看是模拟实际上要通过贪心策略才能高效解出。这三个模板务必练到闭着眼都能默写的程度。考场时间紧张第二题能秒解的是绝对优势。2.4 第三题动态规划与图论区分度最高的部分第三题是一整场考试的分水岭。很多人栽在动态规划上其实DP的题目在OD机试里有很强的规律性翻来覆去就是那几类0/1背包和完全背包及其变体如“分割等和子集”“零钱兑换”最长上升子序列、最长公共子序列编辑距离两个字符串的DP经典题区间DP合并石子类状态压缩DP偶尔出现多在难题里树形DP和二叉树结合热门方向DP的关键是“状态定义”和“状态转移方程”。我辅导过不少同事发现他们卡住的原因不是不会写转移方程而是看到题目不知道用什么DP。这里有一个很实用的判断标准如果题目问“最多/最少/多少种方式/是否可行”并且数据范围在10³到10⁵之间大概率是DP题。图论方面C卷的图论题不算难但考到就容易让人懵。重点准备三块并查集判断连通性、找冗余连接拓扑排序课程安排类、任务调度类最短路Dijkstra模板要会但通常不会考特别复杂的变形图论题有几道是非常经典的“座右铭题”刷个二三十道就能形成条件反射。2.5 容易忽略但频现的“套路型”考点除了上述主流考点有几个“套路型”考点值得单独提一下因为它们在C卷中出现的频率远超想象。第一个是前缀和和差分数组。区间求和的题如果你每次都用循环累加大数据量直接超时。前缀和可以把区间求和压到O(1)。差分数组则用于“多次区间更新后求最终数组”这类题是暴力解法的最佳替代。第二个是二分答案。有些题目问“最大值最小化”或“最小值最大化”比如把数组分成m份使每份和的最大值最小。这类题直接贪心会翻车但配合二分查找可以稳定解出。第三个是排序贪心的结合变体。比如会议室安排、合并重叠区间、用最少数量的箭引爆气球全是“先排序再贪心”的套路。第四个是有时候会出现大数处理和取模问题。Python无所谓但C/Java用户要注意结果会不会溢出。C选手遇到取模运算多记得用long long。3. 双机位布置实操一次全讲透3.1 设备准备清单不要小看设备准备很多考生的体验就是“电脑好好的手机摄像头不清楚直接导致机位验证失败”。开考前先把这些备好一台能正常联网、带摄像头的电脑最好支持Chrome或Edge浏览器。牛客考试系统对浏览器有兼容性要求IE、Safari可能会出问题。一部能扫码、能开启视频通话/录像功能的智能手机。要求摄像头像素别太差否则侧后方画面模糊监考看不清楚手部动作会被标记。一个稳定的手机支架。建议用落地支架或桌面支架高度可调的那种。一个光线充足的环境。逆光、暗光会导致电脑机位看不清人脸。3.2 第二机位摆放角度参数参考第二机位的核心目的是让监考看到“你的屏幕内容你的操作动作”所以摆放原则就是视角能覆盖屏幕和双手。我自己验证过比较稳的角度配置是这样的手机放在考生的右后侧或左后侧距离身体约50到80厘米。手机高度调节到比桌面高出30到40厘米镜头略向下俯拍。画面中应同时包含电脑屏幕的下半部分或全部、考生的双手和上半身侧影、桌面上的纸笔如果有允许的草稿纸。手机支架调整好后用胶带或重物固定底部防止中途滑动。有条件的话提前用另一台设备进入会议/软件测试画面角度。如果只有一台手机可以在手机上调出相机预览模式人坐到电脑前模拟操作通过相机画面观察位置是否合适。3.3 机位验证与考试中的常见坑考试前系统一般会让你用手机扫码进入“第二视角监控”然后等待监考老师确认两个画面都正常才允许开始考试。这个过程中有几个坑手机连接的是同一个Wi-Fi但手机进视频会议后可能会卡顿。建议电脑用有线网络或5G频段路由手机用同一路由但保持网络顺畅。考试中途手机息屏了或者系统通知弹出来挡住了摄像头都有可能被判机位异常。考试期间不要把手机拿起来回消息即使它在支架上。移动手机本身就可能被判定为动作异常。有的监考会要求你展示身份证件或确认周围环境。别慌按要求做就行。注意如果你提前发现自己的设备不符合要求比如没有摄像头、手机坏了一定要在考试前联系HR或考试系统客服申请调整不要等到开考再去折腾那样大概率会被取消本场考试资格。3.4 草稿纸与桌面物品的合规问题双机位考试对桌面状态查得比过去严格。建议桌面只保留电脑、鼠标、键盘、手机支架、一张空白草稿纸和一支笔。其它物品包括水杯、书本、平板、耳机、充电器等最好全部挪到看不到的地方。宁可少放不可多放。多一个电子设备在桌面上就可能被误判为作弊工具到时候解释都解释不清。4. 高分实现思路与代码风格要点4.1 为什么建议用Python答题如果考试允许选择语言Python是OD机试的首选。理由很实在写题速度快。比如输入输出处理Python一行split()能搞定的事Java要写好几行。内建数据结构强大。dict、set、defaultdict、Counter用起来极其顺手省去写大量底层代码的时间。大整数处理天然无敌。C/Java遇到大数要写高精度模板Python直接算。考试判题是看结果不看性能天花板的Python的常规复杂度足够应对OD机试的数据范围。有几点例外如果你平时C特别熟、模板信手拈来那继续用C也没问题。但如果你C只是“学过”不要逞强考试时选自己不熟的语言就是自找麻烦。4.2 代码结构模板先框架后细节考场写代码最容易出的问题是题目没完全理解就开始写写到一半发现方向错了然后删掉重来时间全浪费了。我习惯的做题流程是花1分钟读题目描述画出输入、输出格式搞清楚用例中的边界条件数据范围、是否有负值、字符串是否可能为空。花3到5分钟先构思算法。如果想到的是暴力法先评估数据范围是否会导致超时。如果觉得思路可行直接写代码框架把主函数和关键逻辑先摆出来。写完再补细节包括类型转换、空值检查、索引边界。用题目给的示例跑一遍确认输出一致。自己再构造几个边界用例空数组、全相同元素、最大值、最小值跑一遍。代码风格上OD机试不像互联网大厂面试那样看重工程规范但有一些底线要做到变量名不能是a、b、c这种无意义命名至少要能看出含义比如left、right、window_count。关键逻辑行要写注释。不一定每行都写但要在“这一步在做什么”的地方加注释。函数不要搞一个几百行的超大main函数能拆小函数就拆小函数。原因不只是可读性而是出问题时定位方便。Python缩进用4个空格不要用tab。虽然系统可能兼容tab但某些在线判题系统对混合缩进会报错。4.3 一个高频题的高分写法示例以“最长无重复字符子串”为例这是滑动窗口的入门题也是OD机试经常出现的第二/第三题原材料。import sys def length_of_longest_substring(s: str) - int: window set() left 0 max_len 0 for right in range(len(s)): while s[right] in window: window.remove(s[left]) left 1 window.add(s[right]) max_len max(max_len, right - left 1) return max_len if __name__ __main__: line sys.stdin.readline().strip() print(length_of_longest_substring(line))这段代码模板可以直接套用到大多数“最长子串/子序列不重复”类题目。注意几个考场细节用while循环收缩左边界而不是if。因为窗口中可能不止一个重复字符。不要忘了更新max_len的时机。边界情况空字符串返回0单字符串返回1。4.4 如何拿到部分分数而不至于零分一个残酷的事实是第三题你大概率可能做不出来。但这不代表你要放弃这300分。OD机试的判分规则看的是“部分通过”吗很多题目是分测试用例计分的你跑通一部分用例就能拿一部分分。实操技巧如果题目不会但能暴力枚举写暴力版本拿基础分。如果暴力也写不出来至少把输入输出正确读出来然后针对几个特殊情况输出结果。比如“如果长度为1直接返回xx”“如果数组为空返回0”。最忌讳的就是打开编辑器一片空白连尝试都不尝试。机试不像面试没有“表达思路分”但代码总归要写点什么。有一个我要特别提醒的不要试图抄网上的代码。有些人和你说“提前背几段代码默写出来”这件事风险极高。第一考官能看出来是否模板化的雷同代码第二查重系统会把相同的代码块标记出来严重的直接取消成绩。老老实实自己练才是正道。4.5 输出格式看不见的分最容易丢OD机试经常有“输出格式不对不给过”的严格判题。最常见的问题列表输出时要求逗号分隔你输出成空格。排序题要求“从小到大”你排成降序。多行输出时多了一个空行。浮点数要求保留两位小数你直接print出来。字符串大小写搞反。在提交代码之前逐字核对题目要求的输出格式用样例数据测一遍再交。哪怕你的算法是对的格式错了就白白丢掉一整个用例的分。5. 在线刷题OJ平台推荐与刷题策略5.1 主刷平台牛客网华为OD专区牛客网是目前华为OD机试模拟题最集中的地方原因很简单正式机试就在牛客上跑刷牛客的题相当于考前直接在相似环境里练。牛客的题库里能搜到大量OD真题和还原题难度从易到难覆盖完整。具体操作搜索“华为机试”或“OD”相关题库。按“简单-中等-困难”或按标签字符串、动态规划、贪心刷。牛客自带在线OJ功能和真实考试一样提交后看通过率有报错信息提示。这一点非常关键因为真实考试环境同样会报编译错误、运行错误、超时等。我建议每天固定刷题量比如工作日两道、周六日四道。不求数量爆炸求每道题都吃透。吃透的标准是不看题解能独立ACAccept并且能清楚地讲出算法复杂度。5.2 辅助刷题平台力扣与经典OJ力扣LeetCode上有大量标签化题型适合按考点集中突破。比如你发现“滑动窗口”不熟就在力扣上搜滑动窗口标签一次刷10道同类题效果立竿见影。力扣的题解区质量普遍较高卡住的时候看题解学习思路是正常操作。经典OJ平台里杭电OJ、POJ、洛谷也都有大量基础题适合打基础。但坦白说它们的题目风格和OD机试差异较大如果你是出于打牢基础的目的去刷没问题如果单纯为了准备OD机试刷力扣和牛客就够了不要浪费太多时间在风格不匹配的OJ上。5.3 刷题节奏三轮复习法第一轮全面扫盲建议用时2到3周。目标是把所有考点都过一遍每个考点至少刷5道简单题、3道中等题形成对考点的整体感知。这一轮不要死磕难题遇到不会的直接看题解看懂后自己默写一遍代码。第二轮按考点专项突破建议用时2到3周。针对自己在第一轮中发现薄弱环节集中刷题。比如动态规划不过关就连续一周只刷DP。同时开始练习模拟考试定时70分钟闭卷做一套三道题的组合锻炼考场节奏。第三轮冲刺复盘考前1周。每天一套模拟题限时限量。重点复习自己整理过的代码模板、常错点清单。不要再碰不会的新题保持手感就好。5.4 如何在牛客OJ里练出“考试感”很多人在牛客刷题时习惯“写到一半看题解”这是备考阶段最大的禁忌。训练时就要模拟真实考试环境把浏览器里所有其他页面和聊天软件全关掉。设定倒计时到点必须交卷。一旦AC了一道题立刻进入下一道题不纠结完美解。模拟考试结束后再复盘错题。这样做的原因很现实平时如果习惯了慢慢磨题考场上会因为时间压力而大脑空白。只有让身体记住“限时、专注、快速切换”的节奏真正上考场才会稳住。5.5 值得关注的在线判题小技巧在线OJ里有一些通用小技巧能在比赛中帮你节省大量时间提交前先看一下运行时间。如果超过了1秒在Python里优先考虑优化循环比如用局部变量缓存全局变量、用sys.stdin.read()替代逐行读取。Python代码用sys.setrecursionlimit()调整递归深度。DFS类题目递归深度可能不够不设置直接爆栈。C/Java选手请注意内存使用。某些题的二维数组开到10⁵×10⁵是不现实的要用滚动数组或压缩存储。程序跑出“运行错误”时优先怀疑数组越界、除零、空指针或None解包。6. 备考时间线与常见问题实录6.1 备考时间线零基础与有基础的不同打法零基础选手大学没系统学过数据结构与算法或学过但很久没碰代码建议留足8周第1周补齐语言基础。如果选Python把list、dict、set、切片、字符串常用方法练熟。第2到4周按考点扫盲优先字符串、数组、哈希、双指针、滑动窗口。第5到7周主攻动态规划和DFS/BFS这期间是提升最明显的阶段。第8周做模拟卷复盘易错点。有基础选手刷过力扣几十道题以上建议4周够用第1周把考点过一遍找出陌生点。第2周专攻薄弱点做牛客OD模拟题。第3周每天一套模拟卷适应节奏。第4周复习模板调整状态。6.2 常见问题双机位和考试环境类问题原因处理办法第二机位画面模糊手机摄像头像素低或镜头有污渍擦干净镜头提高支架高度确保光线充足电脑画面黑屏摄像头权限被浏览器禁用浏览器设置里允许摄像头权限重进考场考试中途网络断开Wi-Fi不稳定手机可用4G/5G信号续接电脑尽量用有线网络手机息屏导致监控中断手机设置休眠关闭自动锁屏或设置屏幕常亮模式监考老师说看不到手部第二机位角度太高/太远微调支架让手部完全进入画面下半部分6.3 常见问题代码和判题类报错/状态可能原因处理方法编译错误语法错误、库没导入看报错行号检查括号、引号是否匹配运行超时算法复杂度过高换O(n²)为O(n)或O(nlogn)解法内存超限开太大数组用滚动数组、字典替代大二维数组答案错误逻辑错误或输出格式错误用样例和自造边界用例排查部分用例通过边界情况没处理好检查空值、最大最小值、重复元素场景6.4 心态调整与实战表现机试是一个“状态大于实力”的考试。实力再强考场上紧张、慌乱、草稿纸都没准备照样可能考砸。几个亲测有效的心态技巧开考前深呼吸三次把注意力集中在“读题”上不要想“能不能过”。每做完一题无论对错先深吸一口气再进入下一题。第三题如果5分钟没思路先写暴力拿部分分然后再想优化。不要和别人比较。你的目标是“通过线”不是“满分”。机考分数高有助于后续主管面定级但先确保通过再追求高分。我自己陪跑的案例里有一个特别典型的本科非科班出身零基础准备了10周前两周几乎每天都在怀疑人生后来按考点分类刷完80道题模拟卷从第一次的90分到第四次稳定450分最后考试实际得分480。他的核心经验就一句话——按考点一块块吃比东一榔头西一棒子高效十倍。还有一个案例是反面教材一个同事C背景很好结果考试时选了C第二题用STL容器时因为迭代器失效问题debug了20分钟最后第三题没时间写。他就是输在“语言习惯和机考场景不匹配”上。如果你选C务必把STL常见坑提前踩一遍。6.5 考试之后成绩与后续流程考完一般几小时到一两天内出成绩和判定结果。成绩通过了会进入下一步的HR对接和技术面试一面、二面有的还有主管面。机试分数也会被面试官看到所以如果分数够高后续聊起来会顺利不少。如果这次没过别气馁。OD机试允许重新约考间隔期一般是一个月左右。这段时间把失败的题整理成错题本按考点再刷两遍下次考试通过概率会大很多。结语一点真实经验最后分享一个很俗但很重要的小技巧考前一周别再刷任何新题了只看自己的笔记和模板。我见过太多人考前一周突然看到一个没见过的题型焦虑得睡不着结果第二天的考试发挥一塌糊涂。机试考的从来不是“你见过多少题”而是“你能不能在有限时间内把见过的知识用出来”。把滑动窗口、双指针、背包九讲、并查集模板默写三遍比看一百道新题有用得多。祝你机试顺利一把过。
返回列表