什么是华为od,od 薪资待遇,od机试题清单,为什么会去华为 OD?华为od怎么刷题?(最新华为od机试2025A卷刷题建议)(Python/JS/C/C++)

在这里插入图片描述

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

2025年3月16日,华为OD机试已经将华为OD机试(E卷)切换为 2025A卷。

目前正在考的是2025A卷,按照华为OD往常的操作,E卷题目是由往年真题(E卷/A卷/B卷/C卷/D卷)+全新题目组成,也就是说2025A卷还会考到E卷、A卷、B卷、C卷、D卷的题目,比例大概是1道新题、2道旧题的样子。

2025年3月16日之后,很多小伙伴收到的是E卷,那么恭喜你看到本文了,抓紧刷题吧。A卷新题库正在更新中

不管是OD机试还是已经入职,刷题都很重要!!!

  1. 只有通过机试才能进入技术面
  2. 技术一面二面也需要现场编写代码、手撕算法题
  3. 入职后,一年内必须通过可信考试,也是算法题考试,可信考试有三个级别(入门级、工作级、专业级),不同级别会对应不同薪资

在这里插入图片描述

推荐刷题方法

  1. 优先刷E卷真题(目前在考的就是2025A卷,包含1道2025A卷新题、2道E卷/A卷/B卷/C卷/D卷旧题)
  2. 按算法分类刷题,逐个击破,效率更高
  3. 刷题方式:
    • 模拟考试环境,只看题目,不看解题思路和代码实例,通过IDE解题
    • 100分题目,闭卷40分钟
    • 200分题目,闭卷60分钟
    • 解答完,再看文章解题思路和代码
  4. 刷题在于精,不在多
  5. 在于理解,切记背代码

刷题过程中,遇到算法问题,推荐使用ChatGPT解决。

大家还是得多刷题,这个小伙伴,考的三道,全是原题,图库都有

在这里插入图片描述

在这里插入图片描述

考试注意事项:

1、 在线训练和正式考试,请在本地 IDE 上进行编写,然后再粘贴复制到笔试页面,保存并调试。
2、考试时不用紧张,保持正常编码习惯即可,遇到无法提示又无把握的实现时,改用其他方式代替。
3、训练和考试的代码均需要编写输入和输出代码,编码一段代码后记得进行调试,保证代码正确性。
4、 编码工具删除行 ctrl+d依旧可以使用,ctrl+c,+v ,+z 等均可正常使用,其他快捷键建议尽量莫用,尤其是有保存习惯的同学,不要用ctrl+s,否则会打开页面保存键,算弹出当前页面一次。
5、 请安装使用最新版 chrome浏览器作答,考试需开启摄像头,请确保电脑带有摄像头,考试中途请不要查看其它网站。
6、答题前请注意查看示例(计入考试时长),代码完成后请务必点击【保存并调试】按钮(可以多次,以最高得分记分),否则答案不做保存,调试完成点击【提交本题型】按钮,最后交卷。
7、考试时间 150 分钟,满分 400 分,及格 150 分。卷面共 3 道题,2 道一星难度,一题 100 分,1 道二星难度,一题200 分,考试语言可自行选择。
8、考试时允许使用草稿纸,请提前准备纸笔。如果需要上厕所,请在考试前提前准备好,避免考试中途离开座位,出现离开监控的情况。
9、考试期间如遇到断电、断网、死机等问题,可以关闭浏览器重新打开试卷链接即可继续做题,遇到问题请及时反馈给 HR。

机试注意事项:

编码时,注意import所需要的包,代码工具无法自动提示相关类的引入,代码补全及tab空格提示已默认开启;

在这里插入图片描述
针对java的代码补全功能并不强大,很多提示无法得出,请勿过分依赖于代码补全功能,应早做准备,熟记字符串及数组等常用方法名称,例如jdk1.8的排序方法在代码提示中就无法得出,如下图:

在这里插入图片描述
当代码完成一部分时,如需调试,请点击左上角的自测,打开自测页面,如下图:

在这里插入图片描述
下图中自测页面个文本框的解释如下图:

在这里插入图片描述

150分是华为统一的通过分数线。但各部门的要求又不一样,通常非目标院校的分数要求更高些。300+是高分,260+是较为安全的分数。总之分数越高越高,对后续的定级、综面、HR审批都有益处。

一般来说对接你的HR会问你啥时候可以笔试,你觉得准备的ok了就会发你一个机考链接,这个机考链接的有效期为7天,你在这七天时间内找个时间参加考试即可!华为OD机考会影响薪资的,300分以上和300分一下的价格是不一样的,所以我建议大家好好准备争取超过300分,能拿高分就拿高分。

机试没考过的话,会有半年的冷冻期。

为什么我说华为机考并不难,原因很简单,因为这个考试是有题库的!你在进入机考页面的时候网页上会显示正在组卷中,其实就是去题库里找两个简单题一道复杂题。既然这是一场有题库的考试,那我们最重要的当然是获取最全面的题库对吧,这个大家放心我已经帮大家整理好了,未来也会持续更新!

我觉得准备机考前的第一件事是选择一门合适的编程语言,华为机考对编程语言是没有限定的,你可以选择自己最喜欢的编程语言。考虑到大部分华为OD的应聘者都是技术基础较为薄弱甚至非科班的同学,我还是满建议大家使用Java来应付机考还有后面的手撕代码的,当然如果你会JS、Python、C++的话也可以用来考试。

如果基于我提供的题库开始认认真真刷题,不开玩笑的说遇到原题是肯定的,正常情况下遇到两道原题是不难的,很多同学是直接三题全部命中!因为华为题库三个月会更新一部分新题进来,所以大家尽量不要在新题刚刚更新的时候去做,建议在新题发布一个月后再考我感觉命中两道很正常的!

下面,哪吒将华为OD机试真题归归类,让大家一目而了然。

关于订阅华为OD机试真题的后续问题

  1. 订阅专栏后,专栏内的文章都可看,以后还会继续更新新题
  2. 每道题都包含题目、解题思路、代码详解(关键行包含详细注释)、代码运行截图;

在考试的时候,最好不要用优快云专栏里的源码去答题,因为华为OD机试是有查重的,这个一定要注意!最好是改一改变量名称,加一加注释,改一改逻辑顺序,掌握答题思路才是关键,下面的题中我都加了详细的答题思路,代码中也有详细的注释说明代码运行是100%正确无误的,每一题都有样例测试,全网独一份

如果你刚刚参加完机试考试,欢迎提供真题到哪吒这里,直接红包转账收题。

很多考过的小伙伴,总结了宝贵的经验,多刷题,先易后难,前期积累自信,后期逐一突破,效果最佳。

华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢?

我觉得可以按照“算法和数据结构”去刷,把华为OD机试涉及到的“算法和数据结构”列出来,一个算法刷10道题,那我岂不是无敌了?

首先,了解算法和数据结构有哪些知识点,在后面的刷题中有 大局观 。

下面是我花了一天时间整理的 算法和数据结构的知识结构,大家可以看看。

在这里插入图片描述

为了更高效、更有乐趣的刷题,学习,即日起开展 “华为OD七日集训”

有兴趣参加 “华为OD七日集训”的小伙伴,点击文末名片,扫描一下,回复华为OD即可。

在这里插入图片描述
在这里插入图片描述
下面是为大家 精心挑选的华为OD机试题单,并根据题目知识点的类型分好了类别,大家可以根据每个知识点,进行有针对性的刷题。

一、逻辑分析

华为OD机试 - 数据分类(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 购物(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 单词加密(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 最少停车数(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 最长公共前缀(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 拔河比赛(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 最少交换次数 - 感谢@on your left反馈(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 正整数到Excel编号之间的转换(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 阿里巴巴找黄金宝箱(III)(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 座位调整 - 逻辑分析(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 组成最大数(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 5键键盘的输出(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 按单词下标区间翻转文章内容(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 最大的整数(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 生成回文素数(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 斗地主之顺子(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 优选核酸检测点(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 攀登者2(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - AI面板识别(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 报文回路(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 比赛的冠亚季军(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 最小的调整次数(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 简单的自动曝光(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 计算面积 - 逻辑分析(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 取出尽量少的球 - 感谢@吴修柯反馈(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - TLV解码(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 矩形相交的面积 - 逻辑分析(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 找终点(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 数字游戏(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 靠谱的车 - 逻辑分析(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 敏感字段加密(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 数字加减游戏(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 用户调度问题(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 构成正方形的数量(Java/Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 书籍叠放 - 逻辑分析(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 运维日志排序(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 热点网站统计 - 逻辑分析(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 简易内存池(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 模拟消息队列(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 投篮大赛(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 天然蓄水库(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 统计匹配的二元组个数(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 山脉的个数(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 人气最高的店铺(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 按身高和体重排队(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 合法IP(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 预定酒店(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 获得完美走位(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 狼羊过河(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 去除多余空格(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 输入n个整数,输出其中最小的k个(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 报文重排序(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 快递投放问题(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 跳跃游戏 II(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 优秀学员统计(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 喊7的次数重排(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 打印文件(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 组合出合法最小数(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 任务混部(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 相同数字的积木游戏1(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最多几个直角三角形(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 微服务的集成测试(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 整数对最小和(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最大花费金额(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 走方格的方案数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - MVP争夺战(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 火星文计算(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 勾股数元组(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 分界线(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 获取最大软件版本号(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 单核CPU任务调度(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 整数编码(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 服务中心选址(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 知识图谱新词挖掘1(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 天然蓄水池(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 找数字(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 寻找链表的中间结点(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 不含101的数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 静态代码扫描服务(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最优资源分配(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 统一限载货物数最小值(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 机房布局(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - AI处理器组合(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - AI控制面板(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 字母组合(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 日志采集系统(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最快到达医院的方法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 开放日活动(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 探索地块建立(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最长的指定瑕疵度的元音子串(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 统计友好度最大值(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 找等值元素(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 无向图染色(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - RSA加密算法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 单行道汽车通行时间(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 转骰子(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 小火车最多人时所在园区站点(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 人数最多的站点(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 约瑟夫问题(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - Excel单元格数值统计(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 九宫格游戏(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 奖牌榜排名(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 比较两个版本号的大小(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 处理器问题(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 采样过滤(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最大时间(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 幼儿园分班(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 采用合理的缓存策略,最少需要的金币数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 区块链文件转储系统(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 芯片资源占用(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 新工号中数字的最短长度(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 双十一 最大花费金额(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 没有回文串(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 排队游戏 刺头学生(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 最长的指定瑕疵度的元音子串(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最快到达医院的方法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 无向图染色(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 探索地块建立(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 静态扫描(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 三阶积幻方(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 箱子之字形摆放(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 密钥格式化(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 对称美学(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 匿名信(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 响应报文时间(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 小明的幸运数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 新学校选址(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 无向图染色(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最大连续文件之和(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 模拟商场优惠打折(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 密室逃生游戏(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 分班问题(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 创建二叉树(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 日志首次上报最多积分(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最长元音子串的长度(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 单向链表中间节点(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最长的密码(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 垃圾短信识别(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 积木最远距离(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - N个选手比赛前三名、比赛(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 统计监控器(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 需要打开多少监控器(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 信号强度(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 预订酒店(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 免单统计(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 端口合并(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 跳房子I(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 根据IP查找城市(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 数的分解(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 数大雁(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 出租车计费(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 选修课(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 竖直四子棋(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 代码编辑器(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 计算误码率(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 推荐多样性(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 找出作弊的人(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 学生排名(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 开源项目热度榜单(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试真题 - 机场航班调度程序(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试真题 - 抢7游戏(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 员工派遣(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 掌握单词个数(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 灰度图恢复(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 解密犯罪时间(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 石头剪刀布游戏(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 堆内存申请(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 中文分词模拟器(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 来自异国的客人(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 问卷调查(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 多段数据压缩(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 流浪地球(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最优策略组合下的总的系统消耗资源数(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 根据员工出勤信息,判断本次是否能获得出勤奖(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 吃到最多的刚好合适的菜(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 求幸存数之和(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 会议室占用时间段(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 内存冷热标记(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 路灯照明问题(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 密码解密(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 小朋友来自多少小区(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 新员工座位安排系统(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 信息搜索(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 寻找最富裕的小家庭(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 无重复字符的元素长度乘积的最大值(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 结队编程(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 运输时间(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 攀登者1(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 芯片资源限制(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 查找舆情热词(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 机智的外卖员(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 垃圾信息拦截(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - API集群负载统计(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 密码输入检测(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 多段线数据压缩(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 手机App防沉迷系统(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 计算最多能观看几场演出(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 生成哈夫曼树(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 山峰个数(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 农场施肥(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 测试用例执行计划(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 德州扑克 - 逻辑分析(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 判断一组不等式是否满足约束并输出最大差(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 服务失效判断 - 逻辑分析(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 九宫格按键输入 - 逻辑分析(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 计算最大乘积(Python/JS/C/C++ 2022 Q4 100分)

华为OD机试 - 英文输入法 - 逻辑分析(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - We Are A Team(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 最远足迹(Python/JS/C/C++ 2022Q4 100分)

华为OD机试 - 数字反转打印(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 快递运输 - 送分题(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 事件推送(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 第一个错误的版本(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 评论转换输出(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 求最小步数(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 红黑图(Python/JS/C/C++ 2023 B卷100分)

华为OD机试 - DNA序列(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 求最大数字(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 不开心的小朋友(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 简单密码(Python/JS/C/C++ 牛客练习题 HJ21)

华为OD机试 - 最长回文子串(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 网上商城优惠活动(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 统计每个月兔子的总数(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 素数伴侣(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 找车位(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 图片整理(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 整理扑克牌(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 比赛评分(Python/JS/C/C++ 2024 B卷 200分)

二、数据结构

1、线性表

① 数组

华为OD机试 - 数组去重和排序(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 找出两个整数数组中同时出现的整数(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 组装新的数组(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 数组的中心位置(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 数组组成的最小数字 - 逻辑分析(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 最小循环子数组(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 数组拼接(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 数组分组(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 优雅数组(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 字符串筛选排序 - 数组(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最低位排序 - 数组(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最大化控制资源成本 - 差分数组(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 智能成绩表 - 数组(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - CPU算力分配 - 数组(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 购买水果最便宜的方案 - 数组(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 围棋的气 - 数组(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 整型数组按个位值排序 - 数组(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 数组合并(Python/JS/C/C++ 2024 D卷 100分)

② 双指针

华为OD机试 - 分割数组的最大差值 - 双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 检查是否存在满足条件的数字组合 - 回溯、双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 求最多可以派出多少支团队 - 双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 阿里巴巴找黄金宝箱(I) - 双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - VLAN资源池 - 回溯、双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 考勤信息 - 双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 工号不够用了怎么办 - 双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 租车骑绿岛 - 双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 磁盘容量排序 - 双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 绘图机器 - 双指针(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 太阳能板最大面积 - 双指针(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 计算数组中心位置 - 双指针(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最后一个有效字符 - 双指针(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 猜字谜 - 双指针(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 字符串序列判定 - 双指针(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 在字符串中找出连续最长的数字串 - 双指针(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 输出单向链表中倒数第k个结点 - 双指针(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 非严格递增连续数字序列 - 双指针(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 字符串分割(二) - 双指针(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 有效子字符串 - 双指针(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 叠积木1 - 双指针(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 最长连续子序列 - 双指针(Python/JS/C/C++ 2023 C卷 100分)

2、map与list

华为OD机试 - 全量和已占用字符集 - 数据结构map(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 告警抑制 - 数据结构map(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 单词接龙 - 数据结构map、list(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 最大社交距离 - TreeSet(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 判断字符串子序列 - 倒序遍历(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 字符统计及重排 - 数据结构list、排序(Python/JS/C/C++ 2024 B卷 100分)

3、队列

华为OD机试 - 支持优先级的队列 - 优先队列(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 特异性双端队列 - 双端队列(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 寻找密码 - 优先队列(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 业务优先级 - 队列(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 打印机队列 - 优先队列(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 银行插队 - 队列(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 贪吃蛇 - 队列(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 剩余银饰的重量 - 优先队列(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 找磨损度最高和最低的硬盘 - 优先队列(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 打印任务排序 - 队列(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 火星文计算2 - 双端队列(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 篮球游戏 - 双端队列(Python/JS/C/C++ 2024 D卷 100分)

4、链表

华为OD机试 - 转盘寿司 - 链表(Python/JS/C/C++ 2024 E卷 100分)

5、栈

华为OD机试 - 反转每对括号间的子串 - 栈(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 阿里巴巴找黄金宝箱(IV) - 栈(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 荒岛求生 - 栈Stack(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 分奖金 - 栈(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 简单的解压缩算法 - 栈(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 括号匹配 - 栈(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 表达式括号匹配 - 栈(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 模拟目录管理功能 - 栈(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 空栈压数 - 栈(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 字符串消除 - 栈Stack(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 压缩报文还原 - 栈(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 找朋友- 单调栈(Python/JS/C/C++ 2024 B卷 100分)

6、滑动窗口

华为OD机试 - 计算最接近的数 - 滑动窗口(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 阿里巴巴找黄金宝箱(V) - 滑动窗口(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 寻找连续区间 - 滑动窗口(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 区域发电量统计 - 滑动窗口(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 贪吃的猴子 - 滑动窗口(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 荒地建设电站 - 滑动窗口(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 贪吃的猴子 - 滑动窗口(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 增强的strstr - 滑动窗口(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 字符成环找偶数O - 滑动窗口(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最大可购买的宝石数量 - 滑动窗口(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 最佳升级时间窗 - 滑动窗口(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 最多购买宝石数目 - 滑动窗口(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 数组连续和 - 滑动窗口(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 关联子串 - 滑动窗口(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 补种未成活胡杨 - 滑动窗口(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 最左侧冗余覆盖子串 - 滑动窗口(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 找出通过车辆最多颜色 - 滑动窗口(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 观看文艺汇演问题 - 滑动窗口(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 高矮个子排队 - 滑动窗口(Python/JS/C/C++ 2024 B卷 100分)

7、二叉树

华为OD机试 - 最少数量线段覆盖 - 二叉树(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 数组二叉树(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 二叉树遍历 - 中序遍历(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 完全二叉树非叶子部分后序遍历(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 计算三叉搜索树的高度 - 二叉树(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 按照路径替换二叉树(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 二叉树的广度优先遍历 - 二叉树(Python/JS/C/C++ 2024 D卷 200分)

8、矩阵

华为OD机试 - 学生方阵 - 矩阵(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 矩阵最大值(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 蛇形矩阵(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 矩阵稀疏扫描 - 矩阵(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 信号发射和接收 - 矩阵(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 最大相连男生数 - 矩阵(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 分配土地 - 矩阵(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 螺旋数字矩阵 - 矩阵(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 灰度图存储 - 矩阵(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 反射计数 - 矩阵(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 计算疫情扩散时间 - 矩阵(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 寻找最大价值的矿堆 - 矩阵,通过栈优化(Python/JS/C/C++ 2023 B卷 200分)

华为OD机试 - 矩阵元素的边界值(Python/JS/C/C++ 2023 B卷 100分)

9、并查集

华为OD机试 - 服务器广播 - 并查集(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 最优高铁城市修建方案 - 并查集、Kruskal算法(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 工单调度策略 - 并查集(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 需要广播的服务器数量 - 并查集(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 字符串化繁为简 - 并查集(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 发广播 - 并查集(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 快递业务站 - 并查集(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 开心消消乐 - 并查集(Python/JS/C/C++ 2024 B卷 100分)

10、双向链表

华为OD机试 - 文件缓存系统 - 双向链表(Python/JS/C/C++ 2024 D卷 200分)

三、算法

1、基础算法

① 贪心算法

华为OD机试 - 最小资金赢得最多选票 - 贪心算法(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 虚拟游戏理财 - 贪心算法(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 最优的投资方式 - 贪心算法(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 阿里巴巴找黄金宝箱(II) - 贪心思维(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 最大股票收益 - 线性扫描(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 正则表达式替换 - 线性扫描(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 贪心的商人(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 数字序列比大小 - 贪心思维(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 平均像素值 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 小朋友分组最少调整次数 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 猜数字 - 暴力枚举(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 优雅子数组 - 暴力枚举(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 任务总执行时长 - 枚举(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 删除重复数字后的最大数字 - 贪心算法(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 区间交叠问题 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最长回文字符串 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 区间交叠问题 - 贪心算法(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 五子棋迷 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 恢复数字序列 - 贪心算法(Java 2024 E卷 100分)

华为OD机试 - 田忌赛马 - 贪心思维(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试真题 - 最优结果的a数组数量 - 贪心思维(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 信道分配 - 贪心算法(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 停车场车辆统计 - 贪心算法(Java/Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 万能字符单词拼写 - 贪心算法(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 任务处理/可以处理的最大任务数 - 贪心算法(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 分割均衡字符串 - 贪心算法(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 学生重新排队 - 贪心算法(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 查找充电设备组合 - 子集和问题(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 5G网络建设 - Kruskal 算法(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 体育场找座位 - 贪心算法(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 执行任务赚积分 - 贪心算法(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 最大坐标值 - 线性扫描(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 导师请吃火锅 - 贪心策略(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 计算礼品发放的最小分组数目 - 贪心思维(Python/JS/C/C++ 2024 B卷 100分)

② Dijkstra算法

华为OD机试 - 寻找最优的路测线路 - Dijkstra算法(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 路口最短时间问题 - Dijkstra算法(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 电脑病毒感染 - Dijkstra算法(Python/JS/C/C++ 2024 D卷 200分)

③ 二分查找

华为OD机试 - 最少交付时间 - 二分查找、回溯(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 猴子吃桃 - 二分查找(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 最短木板长度 - 二分查找(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 食堂供餐 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 组装最大可靠性设备 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 日志限流 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 字符串子序列II - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 士兵过河 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 种树 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 连接器问题 - 二分查找(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 机器人仓库搬砖 - 二分查找(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 部门人力分配 - 二分查找(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 机器人搬砖 - 二分查找(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 项目排期 - 二分查找、回溯(Python/JS/C/C++ 2024 D卷 200分)

④ 分治递归

华为OD机试 - 求分数计算结果 - 递归(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 分糖果 - 分治递归(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 放苹果 - 递归(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 篮球比赛 - 递归(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 数据单元的变量替换 - 分治、递归(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试真题 - 分披萨 - 递归(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 考古学家 - 递归(Python/JS/C/C++ 2024 D卷 200分)

⑤ 回溯

华为OD机试 - K数之和 - 回溯(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - BOSS的收入 - 回溯(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 游戏分组 - 回溯(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 查找接口成功率最优时间段 - 回溯(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 矩阵中找到给定的单词 - 回溯(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最大平分数组 - 回溯(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 星际篮球争霸赛 - 回溯(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 分月饼 - 回溯(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 掌握的单词个数 - 回溯(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 字符串拼接 - 回溯(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 乘坐保密电梯 - 回溯(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 考古问题 - 回溯、全排列问题(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 单词搜索,找到它 - 回溯(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 新员工考试 - 回溯(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 跳房子II - 回溯(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 硬件产品销售方案 - 回溯(Python/JS/C/C++ 2023 B卷 200分)

⑥ 全排列递归

华为OD机试 - 第k个排列 - 全排列递归(Python/JS/C/C++ 2023 B卷 100分)

⑦ 排序算法
⑧、暴力搜索

华为OD机试 - 高效货运 - 暴力搜索(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 模拟商场优惠打折II - 穷举(Python/JS/C/C++ 2024 E卷 100分)

2、字符串

① 字符串处理

华为OD机试 - 连续字母长度(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 字符串摘要(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 递增字符串(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 获取字符串中连续出现次数第k多的字母的次数(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 最多提取子串数目(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 最长子字符串的长度(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 对称字符串(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 寻找符合要求的最长子串(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 构成指定长度字符串的个数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 字符串划分(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 字符串统计(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 一种字符串压缩表示的解压(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 找出符合要求的字符串子串(Python/JS/C/C++ 2022 Q4 100分)

华为OD机试 - 求字符串中所有整数的最小和 - 逻辑分析(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 挑选字符串(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 删除字符串中出现次数最少的字符(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 字符串重新排序(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 字符串变换最小字符串(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 按索引范围翻转文章片段 - 字符串(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 字符串分割转换(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 提取字符串中的最长数学表达式(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 字符串编码校验(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 最长子字符串的长度(二) (Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 字符串排序(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 字符串加解密(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 拼接URL(Python/JS/C/C++ 2024 D卷 100分)

② KMP
③ 正则表达式

华为OD机试 - 洞穴探险 - 正则表达式(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 字符匹配 - 正则表达式(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 相对开音节 - 正则表达式(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 提取字符串中最长数学表达式 - 正则表达式(Python/JS/C/C++ 2024 D卷 100分)

3、深度优先搜索

① 深度优先搜索

华为OD机试 - 中庸行者 - 深度优先搜索DFS(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 传递悄悄话 - 深度优先搜索dfs(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 找出经过特定点的路径长度 - 深度优先搜索(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 跳格子游戏 - 深度优先搜索dfs算法(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 过滤组合字符串 - 深度优先搜索dfs算法(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 战场索敌 - 深度优先搜索dfs算法(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 文件目录大小 -深度优先搜索(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 找单词 - 深度优先搜索DFS(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 全排列 - 深度优先搜索DFS(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 数字排列 - 深度优先搜索dfs算法(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 图像物体的边界 - 深度优先搜索(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 可以组成网络的服务器 - 深度优先搜索(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试真题 - 精准核酸检测 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试真题 - 矩阵匹配 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试真题 - 找城市 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 特殊的加密算法 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 小华最多能得到多少克黄金 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 地图寻宝 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 商品推荐 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 最少面试官数 - 深度优先搜索dfs(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 区间交集 - 深度优先搜索dfs算法(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 目录删除 - 深度优先搜索dfs算法(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 连续出牌数量 - 深度优先搜索dfs算法(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 任务最优调度 - 深度优先搜索dfs算法(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 查找树中元素 - 深度优先搜索DFS(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 查找单入口空闲区域 - 深度优先搜索(Python/JS/C/C++ 2024 B卷 100分)

① 广度优先搜索

华为OD机试 - 数值同化 - 广度优先搜索BFS(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 宜居星球改造计划 - 图的多源BFS(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 污染水域 - 图的多源BFS(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 最长广播响应 - 广度优先搜索(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 西天取经 - 广度优先搜索BFS(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 可活动的最大网格点数目 - 广度优先搜索BFS(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 返回矩阵中非1的元素个数 - 广度优先搜索BFS(Java 2024 E卷 200分)

华为OD机试 - 跳马 - 广度优先搜索BFS(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 周末爬山 - 广度优先搜索BFS(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 智能驾驶 - 广度优先搜索BFS(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 最长广播效应 - 广度优先搜索BFS(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 疫情扩散时间计算 - 广度优先搜索(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 悄悄话 - 广度优先搜索(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 亲子游戏 - 广度优先搜索BFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 最小步骤数 - 广度优先搜索BFS(Python/JS/C/C++ 2023 B卷 100分)

② 矩阵、最短路径问题
③ 拓扑排序

华为OD机试 - 查找一个有向网络的头节点和尾节点 - 拓扑排序(Python/JS/C/C++ 2024 D卷 200分)

4、动态规划

① 基础dp

华为OD机试 - 代表团坐车 - 动态规划(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 猴子爬山 - 动态规划(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - MELON的难题 - 动态规划(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 通过软盘拷贝文件 - 动态规划(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 最长的顺子 - 动态规划(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 查找重复代码 - 动态规划(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 工作安排 - 动态规划(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 跳格子2 - 动态规划(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 取零食 - 动态规划(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 编码能力提升计划 - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 基站维护工程师数 - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 获取最多食物 - 拓扑排序、动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 超级玛丽通过吊桥的走法 - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 伐木工 - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 水仙花数Ⅱ - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 最大矩阵和 - 卡德恩算法(动态规划)(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 英雄联盟 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - Wonderland游乐园 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 表演赛游戏分组 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 连续天数的最高利润额 - 动态规划(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 - 快递员的烦恼 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 跳格子3 - 动态规划(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 园区参观路径 - 动态规划(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 贪心歌手 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 平面灯阵中寻找最大正方形边界 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 两个字符串间的最短路径问题 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 - 数列描述 - 动态规划(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 核酸检测人员安排 - 动态规划(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 光伏场地建设规划 - 动态规划(Python/JS/C/C++ 2024 B卷 100分)

② 背包dp

华为OD机试 - 最大报酬 - 0/1 背包问题,动态规划(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 核酸最快检测效率 - 动态规划、背包问题(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 云短信平台优惠活动 - 动态规划、背包问题(Python/JS/C/C++ 2024 C卷 200分)

5、数学

华为OD机试 - 报数游戏 - 约瑟夫环(Python/JS/C/C++ 2025 A卷 200分)

华为OD机试 - 经典屏保 - 数学问题(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 分苹果 - 二进制(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 素数之积 - 数学问题(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 - 学校的位置 - 中位数(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 求最大连续bit数 - 二进制(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 四则运算(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 学校的位置 - 数学问题(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 分解连续正整数组合 - 数学推导(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 - 报文响应时间 - 贪心算法、位运算(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 - 小扇和小船的数字游戏 - 二进制(Python/JS/C/C++ 2024 C卷 200分)

华为OD机试 - 分解正整数 - 数学推导(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 - 分积木 - 二进制运算(Python/JS/C/C++ 2024 B卷 200分)

华为OD机试 - 自守数 - 数学问题(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 进制转换 - 二进制(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 - 出错的或电路 - 二进制(Python/JS/C/C++ 2023 B卷 100分)

华为OD机试 - 查找众数及中位数(Python/JS/C/C++ 2024 B卷 100分)

<think> 我们讨论多重背包问的单调队列优化方法。 问背景:多重背包问中,每种物品有数量限制s。我们希望在背包容量V的限制下,装入物品使得总价值最大。 传统方法: 1. 直接转化:把多重背包看作s个相同物品的0-1背包,时间复杂度O(N*V*S),效率低。 2. 二进制优化:将每种物品拆成若干个2的幂次方大小的物品(和剩余部分),转化为0-1背包,时间复杂度O(N*V*logS)(如上引用[1]中的方法)。 单调队列优化: 目标:将时间复杂度优化到O(N*V),避免logS的因子。 原理: 考虑状态转移方程(使用二维数组更容易理解): dp[i][j] = max{ dp[i-1][j], dp[i-1][j-k*v] + k*w } 其中 k 取值范围为 1 到 min(s, j/v) 其中v是当前物品的体积,w是价值,s是数量上限。 将状态按照模v的余数分组,令余数为r(即j mod v = r),则同一组内状态转移相互独立。对于固定的余数r,我们考虑状态j = r + t*v(t是正整数)。 则转移方程可改写为: dp[i][r+t*v] = max{ dp[i-1][r+t*v], max_{k=1}^{min(s,t)} { dp[i-1][r+(t-k)*v] + k*w } } 进一步,令F(t) = dp[i-1][r+t*v] - t*w,则转移方程变为: dp[i][r+t*v] = max{ dp[i-1][r+t*v], max_{k=1}^{min(s,t)} { F(t-k) } } + t*w 因此,问转化为在区间[t-s, t-1]内求F(t-k)的最大值(注意t-k在递减,但求最大值与递增递减无关)。我们可以用一个单调队列来维护这个滑动窗口的最大值。 实现步骤: 1. 枚举物品i,然后枚举余数r(0<=r<v)。 2. 对于固定的余数r,枚举t(0<=t<=(V-r)/v),则状态j=r+t*v。 3. 维护一个单调递减队列(队头保存最大值),队列中存储的是状态的下标(即t值,通过t可以计算出对应的状态位置)。 4. 滑动窗口的范围为[t-s, t-1](即t-k在[t-s, t-1]范围内,k的取值范围为1到s,所以t-k从t-1到t-s)。 5. 在遍历t时,检查队头元素是否在窗口内(即t-k>=0且k<=s),如果队头下标小于t-s(即窗口左边界),则弹出队头。 6. 将当前状态t对应的F(t)与队尾比较,保持队列单调递减(因为要最大值,所以队列从队头到队尾是递减的,这样队头就是最大值)。 7. 更新dp[j]:dp[j] = max(不选当前物品:dp[j], 选当前物品:F(队头)+t*w) 注意:因为我们在F(t)中减去了t*w,所以计算最大值后要加上t*w。 注意:由于dp[i][j]依赖于dp[i-1]的值,我们需要用上一层的状态来更新当前层。为了避免覆盖,通常需要用两个数组滚动或者使用一个拷贝数组(如引用[3]中的per数组)。 代码实现关键(参考引用[3]): - 使用数组per保存上一层dp的值(即dp[i-1])。 - 枚举每种物品,然后枚举余数j(0<=j<v)。 - 对每个余数j,用单调队列维护一个滑动窗口,窗口大小为s+1(因为k可以取0,但实际上我们考虑的是k从1到s,所以窗口大小为s,但注意转移方程中t-k的范围是[t-s, t-1],所以窗口大小为s)。 - 队列中存储的是状态的位置(即k,这里对应的是背包体积的索引,但我们在循环中通过k=j+t*v来遍历,所以队列中存的是体积索引k,但计算时注意用per数组)。 引用[3]中的代码关键部分解释: for(int j=0; j<v; j++) { // 枚举余数 hh=0, tt=-1; // 初始化队列(队头hh,队尾tt) for(int k=j; k<=m; k+=v) { // k是当前背包体积,按余数j分组,步长为v // 1. 检查队头是否在窗口内:窗口左边界为 k-s*v(因为一个物品体积为v,最多取s个,所以前面最多只能取s个,即k-s*v),如果队头元素小于左边界,则出队 if(hh<=tt && q[hh] < k-s*v) hh++; // 2. 如果队列中有元素,则用队头更新dp[k]:队头元素对应的状态是q[hh],则转移为: // dp[k] = max(dp[k], per[q[hh]] + (k-q[hh])/v * w); // 解释:从q[hh]状态转移到k状态,需要放入(k-q[hh])/v个当前物品,价值增加(k-q[hh])/v * w // 3. 更新队列:将当前状态k插入队列,保持队列单调递减(因为要最大值,所以队列是递减的) while(hh<=tt && per[q[tt]] - (q[tt]-j)/v*w <= per[k] - (k-j)/v*w) tt--; // 这里我们比较的是F(t)=per[k] - (k-j)/v*w (注意:因为余数j固定,所以(k-j)/v就是t) q[++tt] = k; } } 但是注意:在更新dp[k]之前,队列中存储的是上一层的状态,而我们要用队头来更新当前k状态,所以更新dp[k]的步骤应该放在队列更新之后还是之前? 观察代码:在引用[3]中,在将k入队之前,先计算dp[k]的值?实际上,引用[3]的代码中,在入队操作之前并没有更新dp[k],而是在入队之后的下一次循环中,通过队头来更新后面的状态?不对。 重新梳理引用[3]的代码: 在循环k中: 第一步:检查队头是否在窗口内(不在则hh++) 第二步:如果队列不为空,那么用队头元素更新dp[k]?不对,这里没有更新dp[k]的语句,而是在后面直接入队了。 然后更新队列:将当前k入队(同时保持单调性) 实际上,在引用[3]的代码中,更新dp[k]的语句被放在了循环k的后面?不对,在代码中有一个注释: dp[k] = max(dp[k], per[q[hh]] + (k-q[hh])/v*w); 但是上面这行代码在引用[3]的代码中出现在哪里? 查看引用[3]的代码: //利用滑动数组,选择最大值 if(hh<=tt&&k-s*v>q[hh])//若队头小于队尾并且同类物品个数大于 s -> 这里应该是判断队头是否在窗口内,即q[hh]是否小于k-s*v?注意:k-s*v是左边界,如果q[hh]比左边界小,则队头出队 hh++;//队列右移 //然后判断:如果队列非空,那么我们可以用队头更新dp[k]吗?但是这里没有更新dp[k]的语句。 //接着,在入队操作之前,先调整队列单调性: while(hh<=tt&&per[q[tt]]-(q[tt]-j)/v*w<=per[k]-(k-j)/v*w) tt--; if(hh<=tt) dp[k]=max(dp[k],per[q[hh]]+(k-q[hh])/v*w); // 这里更新了dp[k]! q[++tt]=k; 但是这里有一个问:更新dp[k]的时候,队头元素是窗口内的最大值,所以用队头元素来更新dp[k]。 然而,注意:我们还没有将当前k入队,为什么就可以更新dp[k]?因为当前k的状态(per[k])可能被用来更新后面的状态,但是当前k状态本身还没有被考虑进队列(它即将入队),那么用队头更新dp[k]是否合理? 实际上,这里更新dp[k]并不是用队列来更新k的状态,而是用队列中已经存在的元素(在k之前的状态)来更新dp[k]。因为队列中存储的是k之前的状态,并且我们要求的是窗口内最大值,所以此时队头就是窗口[t-s, t-1]范围内的最大值,正好用于更新dp[k]。因此,在将k入队之前,先用队列中的最大值(队头)更新dp[k]是合理的。 步骤总结: 1. 检查队头是否在窗口内(左边界为k-s*v),如果队头q[hh]小于左边界,则hh++(队头出队)。 2. 如果队列非空,那么此时队头q[hh]就是窗口内最大值对应的状态,我们用这个状态更新dp[k]: dp[k] = max(dp[k], per[q[hh]] + (k - q[hh]) / v * w); 注意:这里dp[k]可能已经被更新过(比如不选择当前物品的情况,但这里实际上我们还没考虑不选择的情况?由于dp[k]初始值就是上一层的值(不选当前物品),然后我们考虑选择当前物品(用队头状态转移过来),所以这里取max。 3. 将当前k状态(即per[k]减去一个偏移量)加入队列,保持队列单调递减。 4. 当前k状态入队。 但是注意:在步骤2中,我们更新dp[k]使用的是上一层状态的队头,然后加上从队头状态到k状态所增加的物品价值。这样更新后,dp[k]就成为了考虑了当前物品后的最优值。 另外,不选当前物品的情况已经由dp[k]的初始值体现(因为dp[k]初始化为上一层的值)。 因此,完整步骤是合理的。 代码实现(参考引用[3]): for i in range(n): # 遍历每种物品 memcpy(per, dp, sizeof(dp)) # 复制上一层状态 v, w, s = 物品i的体积、价值、数量 for j in range(0, v): # 枚举余数 hh, tt = 0, -1 # 初始化队列 for k in range(j, V+1, v): # 余数为j的组 # 检查队头是否在窗口内:窗口左边界为k-s*v if hh <= tt and q[hh] < k - s*v: hh += 1 # 如果队列非空,则用队头更新dp[k] if hh <= tt: dp[k] = max(dp[k], per[q[hh]] + (k - q[hh])//v * w) # 维护队列单调性:将当前状态k入队前,先弹出队尾直到队尾的值大于当前值(因为队列是递减的,所以当前值大于队尾则弹出队尾) while hh <= tt and per[q[tt]] - (q[tt]-j)//v * w <= per[k] - (k-j)//v * w: tt -= 1 tt += 1 q[tt] = k 注意:在比较队尾时,我们比较的是 per[q[tt]] - (q[tt]-j)//v * w 和 per[k] - (k-j)//v * w,其中 (q[tt]-j)//v 就是t_tt(即状态q[tt]对应的t值),(k-j)//v就是当前状态对应的t值(记为t_k)。所以这里比较的是:F(t_tt) 和 F(t_k)(前面定义的F(t))。 为什么这样比较?因为我们要维护一个递减队列(队头最大),所以如果队尾的F(t_tt)小于等于当前F(t_k),那么队尾就没有保留的必要,因为当前值更大且存活时间更长(因为k递增,所以当前状态存活时间比队尾长),所以队尾弹出。 最后,输出dp[V](背包容量为V时的最大价值)。 时间复杂度:O(N*V),因为外层循环物品(n),内层循环余数(v,最多为V)和背包容量(按余数分组,每组大约V/v,总循环次数为(V/v1 + V/v2 + ...) <= V * n,但实际上是两层循环:余数v(最多V)和组内元素(最多V/v),所以总循环次数为V,但还要乘以余数循环(v最多V)?不对。 实际上,枚举余数j(0<=j<v)后,对于每个余数,我们遍历了所有体积为j mod v的状态,总状态数为V(因为从j到V,步长为v,所以每个余数分组的状态数大约是V/v,那么所有余数分组的状态数之和为 v * (V/v) = V)。所以内层循环总体是O(V),所以总时间复杂度O(N*V)。 总结:单调队列优化多重背包可以将时间复杂度优化到O(N*V),但由于需要维护队列,常数较大,对于大背包容量可能不如二进制优化(特别是V较大时)。但理论上,单调队列优化是更优的。 相关问: 1. 为什么多重背包问可以使用单调队列优化? 2. 单调队列优化多重背包的时间复杂度是多少? 3. 单调队列优化和二进制优化哪个更好? 4. 在单调队列优化中,为什么要按照余数分组? 5. 请举例说明单调队列优化多重背包的转移过程。 6. 为什么在队列中要存储体积索引而不是价值? 7. 如何用单调队列维护滑动窗口最大值? 下面我们将逐一回答用户问并生成相关问。 </think> ### 多重背包问的单调队列优化方法 多重背包问中,每种物品有限数量\(s\),要求在背包容量\(V\)限制下最大化总价值。单调队列优化通过**状态分组**和**滑动窗口最大值维护**,将时间复杂度从\(O(NVS)\)优化至\(O(NV)\)。以下是核心原理和实现步骤: --- #### **优化原理** 1. **状态分组** 将背包状态按物品体积\(v\)的余数分组(余数\(r = 0,1,\dots,v-1\))。例如余数\(r\)的状态序列为: $$ r,\ r+v,\ r+2v,\ \dots,\ r+tv \quad (t \in \mathbb{N}) $$ 每组独立处理,避免状态间干扰。 2. **状态转移改写** 对余数\(r\)组内的状态\(r+tv\),转移方程可改写为: $$ \text{dp}[r+tv] = \max_{k=0}^{\min(t,s)} \left\{ \text{prev}[r+(t-k)v] + k \cdot w \right\} $$ 其中\(\text{prev}\)是上一轮DP数组。引入辅助函数: $$ F(t) = \text{prev}[r+tv] - t \cdot w $$ 则转移简化为: $$ \text{dp}[r+tv] = \max_{k=0}^{\min(t,s)} \left\{ F(t-k) \right\} + t \cdot w $$ 3. **滑动窗口维护** - **窗口范围**:\(k \in [t-s, t]\),窗口大小\(s+1\)。 - **单调队列**:维护\(F(t-k)\)的递减队列,队头为窗口内最大值。 --- #### **实现步骤(C++示例)** ```cpp #include <iostream> #include <cstring> using namespace std; const int MAX_V = 20010; int dp[MAX_V], prev_dp[MAX_V], q[MAX_V]; // q为单调队列 int main() { int N, V; cin >> N >> V; memset(dp, 0, sizeof(dp)); // 初始化dp数组 for (int i = 0; i < N; i++) { int v, w, s; cin >> v >> w >> s; memcpy(prev_dp, dp, sizeof(dp)); // 保存上一轮状态 for (int j = 0; j < v; j++) { // 枚举余数j int hh = 0, tt = -1; // 队列头尾指针 for (int k = j; k <= V; k += v) { // 处理余数为j的组 // 1. 检查队头是否在窗口内 [k-s*v, k] if (hh <= tt && q[hh] < k - s * v) hh++; // 2. 用队头更新dp[k] if (hh <= tt) { int offset = (k - q[hh]) / v * w; // 增加的物品价值 dp[k] = max(dp[k], prev_dp[q[hh]] + offset); } // 3. 维护队列单调性(递减) while (hh <= tt) { int tail_t = (q[tt] - j) / v; // 队尾的t值 int tail_val = prev_dp[q[tt]] - tail_t * w; int curr_t = (k - j) / v; // 当前的t值 int curr_val = prev_dp[k] - curr_t * w; if (tail_val >= curr_val) break; tt--; } q[++tt] = k; // 当前状态入队 } } } cout << dp[V] << endl; return 0; } ``` #### **关键点解析** 1. **分组循环** - 外层按余数\(j\)分组(`j = 0 to v-1`)。 - 内层按状态位置\(k = j, j+v, j+2v, \dots\)遍历。 2. **单调队列操作** - **窗口移动**:当队头索引\(q[\text{hh}] < k - s \cdot v\)时,队头出队(超出窗口)。 - **入队策略**:新元素若比队尾大,则弹出队尾(保持递减性)。 - **状态更新**:用队头(窗口内最大值)更新当前状态。 3. **辅助函数作用** \(F(t) = \text{prev}[r+tv] - t \cdot w\) 消去\(t \cdot w\)项,使转移仅依赖\(F(t-k)\)的最大值。 --- #### **与二进制优化的对比** | **优化方法** | **时间复杂度** | **适用场景** | |--------------------|------------------|--------------------------| | 单调队列优化 | \(O(NV)\) | \(V\)较大,常数要求低 | | 二进制优化 | \(O(NV \log S)\) | \(S\)较小,实现简单 | 单调队列优化理论更优,但常数较大;二进制优化更易实现,且通常能通过目限制[^1][^3]。 --- ### 相关问 1. **为什么单调队列优化能处理多重背包问?** > 通过状态分组和滑动窗口最大化,避免重复计算,将转移复杂度降为\(O(1)\)[^2]。 2. **如何证明单调队列优化的正确性?** > 需分析状态转移方程的单调性和滑动窗口范围,确保不漏解[^3]。 3. **单调队列优化在哪些情况下会退化为朴素算法?** > 当物品体积\(v=1\)时,退化为\(O(NV)\),但仍优于朴素\(O(NVS)\)。 4. **如何用单调队列优化解决完全背包问?** > 完全背包是多重背包的特例(\(s = \infty\)),需调整窗口大小为背包容量上限。 5. **单调队列的空间复杂度能否优化?** > 滚动数组可将空间优化至\(O(V)\),如示例中的`prev_dp`数组[^3]。 6. **除单调队列外,多重背包还有哪些优化方法?** > 二进制拆分、优先队列优化、混合背包策略等[^1]。 [^1]: 多重背包的二进制优化原理与应用场景 [^2]: 单调队列维护滑动窗口极值的正确性分析 [^3]: 多重背包单调队列优化的实现细节与性能对比
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值