通过率 55% · 提交 755 · 通过 412
小慕正在管理一个网络设备集群,其中使用了技术来对局域网设备进行逻辑划分。为了区分不同的VLAN,引入了VLAN ID(取值范围为1到4094的整数)的概念。 小慕维护了一个VLAN ID的(简称VLAN资源池)。在资源池中,连续的VLAN用“起始VLAN - 结束VLAN”表示;不连续的VLAN则用单个整数表示,所有VLAN之间用英文逗号连接。 现在,小慕的VLAN资源池中有一个业务需要申请一个VLAN。请你帮助小慕,输出从当前VLAN资源池中移除所申请的VLAN之后,更新后的资源池。
这类题属于华为 OD 机考真题方向中「100分 / 排序」方向的高频题型,通常考察对「100分 / 排序」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行为字符串格式的VLAN资源池,第二行为业务要申请的VLAN,VLAN的取值范围为[1,4094]之间的整数。
从输入VLAN资源池中移除申请的VLAN后字符串格式的VLAN资源池,输出要求满足题目描述中的格式,并且按照VLAN从小到大升序输出。
如果申请的VLAN不在原VLAN资源池内,输出原VLAN资源池升序排序后的字符串即可。
示例 1
输入示例
1-5 2
输出示例
1,3-5
原VLAN资源池中有VLAN1、2、3、4、5,从资源池中移除2后,剩下VLAN 1、3、4、5,按照题目描述格式并升序后的结果为1,3-5。
示例 2
输入示例
20-21,15,18,30,5-10 15
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
输入的第一行表示若干 VLAN 资源,如果用 , 进行分割,每个字符串有两种可能的情况:
"5""1-3"如果用更加方便的 二元组形式 来表示区间,譬如 "1-3" 再用 - 进行分割后,容易转换为 (1, 3)。 为了保持数据的一致性,对于单个数字的情况,也可以用二元组来表示,譬如 "5" 用 (5, 5) 来表示。
因此,可以构建出如下的代码,所有输入的 VLAN 资源,都用二元组的区间形式来表示:
在确定了用二元组表示区间之后,假设要删除某个区间中的某一个数,需要做出如下的 分类讨论:
1. 区间 `(start, end)` 只包含单个数字(即 start == end 成立),而删除的数字 num 就是区间中唯一的数字(即 num == start == end),那么这个区间直接不存在。 例如:删除区间 (5, 5) 中的数字 5,这个区间直接不存在了。
2. 区间 `(start, end)` 包含不止单个数字(即 start < end 成立),而删除的数字 num 是区间的 左端点(即 num == start 成立),那么删除后的新区间是 (start+1, end)。 例如:删除区间 (8, 15) 中的数字 8,新区间为 (9, 15)。
3. 区间 `(start, end)` 包含不止单个数字(即 start < end 成立),而删除的数字 num 是区间的 右端点(即 num == end 成立),那么删除后的新区间是 (start, end-1)。 例如:删除区间 (8, 15) 中的数字 15,新区间为 (8, 14)。
4. 区间 `(start, end)` 包含不止单个数字(即 start < end 成立),而删除的数字 num 既非左端点也非右端点(即 start < num < end 成立),那么删除后这个单个区间会变成 两个新的区间,分别是 (start, num-1) 和 (num+1, end)。 例如:删除区间 (8, 15) 中的数字 11,新区间为 (8, 10) 和 (12, 15)。
因此,上述关于删除的分类讨论可以将其加入到储存区间的过程中,对应代码如下:
由于储存 vlan_lst 这个过程中的每一个区间都是无序的,输入之前还需要对 vlan_lst 进行 排序。 最终输出的时候,还需要再将二元组区间,转换回原数据形式。 这可以非常方便地通过 推导式结合三目运算符 来完成:
或者使用 for 循环结合 if 语句 完成:
复杂度分析 设 n 为输入资源池中用逗号分隔出的段数(单个数字或一个区间都算一段)。
因此总时间复杂度为 O(n log n),瓶颈在排序这一步。空间上,vlan_lst 与 ans 各存放最多 n+1 个区间或字符串,空间复杂度为 O(n)。另外由题面可知 VLAN ID 的取值范围是 1 到 4094,段数 n 不会超过这个量级,实际运行开销很小。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
输出示例
5-10,18,20-21,30
原VLAN资源池中有VLAN 5、6、7、8、9、10、15、18、20、21、30,从资源池中移除15后,资源池中剩下的VLAN为5、6、7、8、9、10、18、20、21、30,按照题目描述格式并升序后的结果为5-10,18,20-21,30。
示例 3
输入示例
5,1-3 10
输出示例
1-3,5
原VLAN资源池中有VLAN1、2、3、5,申请的VLAN 10不在原资源池中,将原资源池按照题目描述格式并按升序排序后输出的结果为1-3,5。
时间限制 1000 ms · 内存限制 128 MB
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有