【华为OD-E卷 - VLAN资源池 100分(python、java、c++、js、c)】

【华为OD-E卷 - VLAN资源池 100分(python、java、c++、js、c)】

题目

VLAN是一种对局域网设备进行逻辑划分的技术,为了标识不同的VLAN,引入VLAN ID(1-4094之间的整数)的概念。
定义一个VLAN ID的资源池(下称VLAN资源池),资源池中连续的VLAN用开始VLAN-结束VLAN表示,不连续的用单个整数表示,所有的VLAN用英文逗号连接起来。
现在有一个VLAN资源池,业务需要从资源池中申请一个VLAN,需要你输出从VLAN资源池中移除申请的VLAN后的资源池。

输入描述

  • 第一行为字符串格式的VLAN资源池,第二行为业务要申请的VLAN,VLAN的取值范围为[1,4094]之间的整数

输出描述

  • 从输入VLAN资源池中移除申请的VLAN后字符串格式的VLAN资源池,输出要求满足题目描述中的格式,并且按照VLAN从小到大升序输出。

如果申请的VLAN不在原VLAN资源池内,输出原VLAN资源池升序排序后的字符串即可

备注

  • 输入VLAN资源池中VLAN的数量取值范围为[2-4094]间的整数,资源池中VLAN不重复且合法([1,4094]之间的整数),输入是乱序的

用例

用例一:
输入:
1-5
2
输出:
1,3-5
用例二:
输入:
20-21,15,18,30,5-10
15
输出:
5-10,18,20-21,30
用例三:
输入:
5,1-3
10
输出:
1-3,5

说明 原VLAN资源池中有VLAN 1、2、3,5,申请的VLAN 10不在原资源池中,将原资源池按照题目描述格式并按升序排序后输出的结果

python解法

  • 解题思路:
  • 问题描述:

任务是解析用户输入的 VLAN 列表(格式可能为单个数字或范围,如 1,3-5,8),将其转换为有序的 VLAN 列表。
支持删除指定的 VLAN,并输出删除后的结果,结果需重新格式化为范围形式。
输入输出要求:

输入:
第一行:VLAN 列表字符串,格式为单个数字或范围的组合,用逗号分隔。
第二行:要删除的单个 VLAN。
输出:
删除后的 VLAN 列表,按范围格式输出。
具体实现:

解析 VLAN 列表:
对输入字符串按逗号分割。
如果片段中包含 -,解析为范围,并将范围内的数字逐个添加到列表中。
否则,将单个数字直接添加到列表中。
最终返回排序后的 VLAN 列表。
格式化 VLAN 列表:
将连续的数字合并为范围(如 [3, 4, 5] 合并为 3-5)。
非连续的数字单独输出。
删除 VLAN:
检查指定的 VLAN 是否在解析后的列表中。
如果存在,移除该 VLAN。
输出结果:
使用格式化函数将修改后的列表转换回范围形式并输出

# 解析 VLAN 字符串为一个有序的整数列表
def parse_vlans(vlan_str):vlans = []  # 用于存储解析后的 VLAN 数字# 将输入字符串按逗号分割for part in vlan_str.split(','):if '-' in part:  # 如果是一个范围(例如 "3-5")# 按 '-' 分割,并将范围的起始和结束值转换为整数start, end = map(int, part.split('-'))# 将范围内的所有数字添加到 VLAN 列表中vlans.extend(range(start, end + 1))else:  # 如果是单个数字vlans.append(int(part))  # 将数字添加到 VLAN 列表return sorted(vlans)  # 返回排序后的 VLAN 列表# 将整数 VLAN 列表格式化为范围字符串
def format_vlans(vlans):result = []  # 用于存储格式化后的范围字符串i = 0# 遍历 VLAN 列表while i < len(vlans):start = vlans[i]  # 当前范围的起始值# 检查后续的数字是否连续while i + 1 < len(vlans) and vlans[i + 1] == vlans[i] + 1:i += 1end = vlans[i]  # 当前范围的结束值# 如果起始值和结束值相同,说明是单个数字if start == end:result.append(f"{start}")else:  # 否则,格式化为范围字符串result.append(f"{start}-{end}")i += 1  # 移动到下一个数字return ",".join(result)  # 返回用逗号分隔的范围字符串# 主程序逻辑
# 第一步:解析输入的 VLAN 列表
vlan_pool = parse_vlans(input())  # 从输入读取 VLAN 字符串并解析为列表
# 第二步:读取需要删除的 VLAN
to_remove = int(input())  # 读取要删除的 VLAN# 第三步:从 VLAN 列表中移除指定 VLAN(如果存在)
if to_remove in vlan_pool:vlan_pool.remove(to_remove)# 第四步:格式化并输出修改后的 VLAN 列表
print(format_vlans(vlan_pool))  # 输出结果

java解法

  • 解题思路
  • 问题描述:

输入一个 VLAN 范围池(如 1,3-5,8),表示 VLAN 的集合。
用户输入一个待移除的 VLAN(如 4)。
从 VLAN 池中删除指定的 VLAN 后,输出更新后的 VLAN 范围,格式与输入保持一致。
输入输出:

输入:
第一行是以逗号分隔的 VLAN 池,可以包含单个数字或范围(如 1,3-5,8)。
第二行是待删除的单个 VLAN(如 4)。
输出:
更新后的 VLAN 范围池,按逗号分隔,格式化为单个数字或范围。
实现步骤:

解析输入:
将第一行的 VLAN 池字符串分割为片段。
解析每个片段,单个数字直接转为范围 [start, start],范围用 [start, end] 表示。
处理删除操作:
遍历解析后的范围池,检查指定的 VLAN 是否在某个范围内。
如果在范围内:
移除当前范围。
根据需要拆分为两个新的范围(即将指定 VLAN 从范围中移除)。
格式化输出:
遍历更新后的范围池,将单个数字和范围分别格式化为字符串。
使用逗号拼接为最终输出。
关键点:

解析范围的逻辑:
例如,3-5 解析为 [3, 5]。
单个数字 8 解析为 [8, 8]。
删除指定 VLAN 的逻辑:
如果指定 VLAN 位于某个范围中:
删除原范围。
如果 VLAN 是范围的起点或终点,更新范围的边界。
如果 VLAN 位于范围中间,拆分为两个范围

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 读取输入并解析 VLAN 池(逗号分隔)String[] inputArr = sc.nextLine().split(",");// 读取需要删除的 VLANint reqVlan = Integer.parseInt(sc.nextLine());// 调用解决函数并打印结果System.out.println(solve(inputArr, reqVlan));}/*** 解决 VLAN 范围池处理问题* * @param pool 输入的 VLAN 池(数组形式,每个元素为范围或单个数字)* @param reqVlan 需要删除的 VLAN* @return 更新后的 VLAN 池(字符串格式)*/public static String solve(String[] pool, int reqVlan) {// 用于存储解析后的 VLAN 范围List<int[]> vlanList = new ArrayList<>();// 解析输入的 VLAN 池for (String part : pool) {// 分割范围字符串(如 "3-5" 或 "8")String[] range = part.split("-");int start = Integer.parseInt(range[0]); // 起始值int end = range.length > 1 ? Integer.parseInt(range[1]) : start; // 结束值vlanList.add(new int[]{start, end}); // 添加范围到列表}// 按起始值对范围列表排序vlanList.sort(Comparator.comparingInt(a -> a[0]));// 遍历范围池,检查并处理要删除的 VLANfor (int i = 0; i < vlanList.size(); i++) {int[] vlan = vlanList.get(i); // 当前范围// 如果指定的 VLAN 在当前范围内if (reqVlan >= vlan[0] && reqVlan <= vlan[1]) {vlanList.remove(i); // 移除当前范围// 如果指定 VLAN 位于范围的中间,拆分为两个范围if (vlan[0] < reqVlan) vlanList.add(i, new int[]{vlan[0], reqVlan - 1}); // 前部分if (vlan[1] > reqVlan) vlanList.add(i, new int[]{reqVlan + 1, vlan[1]}); // 后部分break; // 删除完成后退出循环}}// 将更新后的范围池格式化为字符串List<String> result = new ArrayList<>();for (int[] range : vlanList) {// 如果范围是单个数字if (range[0] == range[1]) result.add(String.valueOf(range[0]));else result.add(range[0] + "-" + range[1]); // 否则格式化为范围}// 返回用逗号分隔的范围字符串return String.join(",", result);}
}

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

更新中

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++高并发服务器WebServer】-5:内存映射与进程通信

本文目录 一、内存映射与进程通信二、匿名映射与进程通信 一、内存映射与进程通信 内存映射Memory-mapped I/O指的是将磁盘文件的数据映射到内存&#xff0c;用户通过修改内存就能够修改磁盘文件&#xff0c;如下图所示&#xff08;进程地址空间指的是虚拟地址空间&#xff09…

使用vscode + Roo Code (prev. Roo Cline)+DeepSeek-R1使用一句话需求做了个实验

摘要 使用vscode、Roo Code和deepseek-reasoner进行了一个实验&#xff0c;尝试使用一句话需求来生成小红书封面图片。工具根据需求提供了详细的架构方案&#xff0c;包括技术栈选择、核心模块划分、目录结构建议等。然后&#xff0c;工具自动化地完成了开发和测试&#xff0c;…

C语言初阶牛客网刷题—— JZ11 旋转数组的最小数字【难度:简单】

1. 题目描述 牛客网在线OJ链接 有一个长度为 n 的非降序数组&#xff0c;比如 [1,2,3,4,5] &#xff0c;将它进行旋转&#xff0c;即把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;变成一个旋转数组&#xff0c;比如变成了 [3,4,5,1,2] &#xff0c;或者 [4,5,1,2,3…

如何解压7z文件?8种方法(Win/Mac/手机/网页端)

7z 文件是一种高效的压缩文件格式&#xff0c;由 7 - Zip 软件开发者所采用。它运用独特的压缩算法&#xff0c;能显著缩小文件体积&#xff0c;便于存储与传输各类数据&#xff0c;像软件安装包、大型资料集等。但要使用其中内容&#xff0c;就必须解压&#xff0c;因为处于压…

豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 豆包MarsCode 蛇年编程大作战 | &#x1f40d; 蛇年运势预测 在线体验地址&#xff1a;蛇年…

【转帖】eclipse-24-09版本后,怎么还原原来版本的搜索功能

【1】原贴地址&#xff1a;eclipse - 怎么还原原来版本的搜索功能_eclipse打开类型搜索类功能失效-CSDN博客 https://blog.csdn.net/sinat_32238399/article/details/145113105 【2】原文如下&#xff1a; 更新eclipse-24-09版本后之后&#xff0c;新的搜索功能&#xff08;CT…

macos的图标过大,这是因为有自己的设计规范

苹果官方链接&#xff1a;App 图标 | Apple Developer Documentation 这个在官方文档里有说明&#xff0c;并且提供了sketch 和 ps 的模板。 figma还提供了模板&#xff1a; Figma

C++异步future

&#x1f30e; C11异步futrue 文章目录&#xff1a; C11异步futrue future介绍     应用场景     future操作       std::async函数模版       std::packaged_task类模版       std::promise类模版 &#x1f680;future介绍 std::future是C11标准库…

洛谷 P2846 [USACO08NOV] Light Switching G C语言

题目描述 Farmer John tries to keep the cows sharp by letting them play with intellectual toys. One of the larger toys is the lights in the barn. Each of the N(2≤N≤105) cow stalls conveniently numbered 1…N has a colorful light above it. At the beginnin…

批量创建ES索引

7.x from elasticsearch import Elasticsearch# 配置 Elasticsearch 连接 # 替换为你的 Elasticsearch 地址、端口、用户名和密码 es Elasticsearch([http://10.10.x.x:43885],basic_auth(admin, XN272G9THEAPYD5N5QORX3PB1TSQELLB) )# # 测试连接 # try: # # 尝试获取集…

大厂案例——腾讯蓝鲸DevOps类应用的设计与实践

蓝鲸体系架构图 蓝鲸CICD应用功能架构 降低DEVOPS门槛—开发者中心 CICD应用需要的后台服务 系列阅读 12306亿级流量架构分析&#xff08;史上最全&#xff09;实现电商平台从业务到架构的治理体系基于主数据驱动的数据治理什么时候需要分表分库&#xff1f;-CSDN博客

React和Vue有什么区别,如何选择?

React和Vue有什么区别&#xff0c;如何选择&#xff1f; React 和 Vue 是当前最受欢迎的前端框架之一&#xff0c;两者在开发者中都有极高的声誉。它们都旨在帮助开发人员构建用户界面&#xff0c;但在实现方式和适用场景上有所不同。如果你正考虑在项目中选择 React 或 Vue&a…

uart、iic、spi通信总线

一、uart uart一种异步串行通信协议&#xff0c;用于在两个设备之间传输数据。它将数据按位发送&#xff0c;不需要时钟信号进行同步。在uart通信中&#xff0c;数据通过两根线路传输&#xff1a;发送线&#xff08;TX&#xff09;和接收线&#xff08;RX&#xff09;。它主要用…

LMI Gocator GO_SDK VS2019引用配置

LMI SDK在VS2019中的引用是真的坑爹,总结一下经验,希望后来的人能少走弯路.大致内容如下: &#xff08;1&#xff09; 环境变量 &#xff08;2&#xff09;C/C 附加包含目录 E:\GWQ\Gocator\GO_SDK\Gocator\GoSdk E:\GWQ\Gocator\GO_SDK\Platform\kApi &#xff08;3&#…

QT QTableWidget控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…

C# OpenCV机器视觉:红外体温检测

在一个骄阳似火的夏日&#xff0c;全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇&#xff0c;平日里熙熙攘攘的街道变得冷冷清清&#xff0c;人们戴着口罩&#xff0c;行色匆匆&#xff0c;眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人&#xff0c;看着这一…

立创开发板入门ESP32C3第八课 修改AI大模型接口为deepseek3接口

#原代码用的AI模型是minimax的API接口&#xff0c;现在试着改成最热门的deepseek3接口。# 首先按理解所得&#xff0c;在main文件夹下&#xff0c;有minimax.c和minimax.h, 它们是这个API接口的头文件和实现文件&#xff0c;然后在main.c中被调用。所以我们一步步更改。 申请…

2025.1.21——六、BUU XSS COURSE 1 XSS漏洞|XSS平台搭建

题目来源&#xff1a;buuctf BUU XSS COURSE 1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;输入框尝试一下 step 2&#xff1a;开始xss注入 step 3&#xff1a;搭建平台 step 4&#xff1a;利用管理员cookie访问地址 三、小结 二编&#…

操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开

报错 操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开 现象 这个exe文件无法删除 解决办法 按下WinR, 找到Electronic Team Virtual Serial Port Driver Service,右击停止. 再次尝试删除,发现这个exe文件成功删除!

单值二叉树(C语言详解版)

一、摘要 今天要讲的是leetcode单值二叉树&#xff0c;这里用到的C语言&#xff0c;主要提供的是思路&#xff0c;大家看了我的思路之后可以点击链接自己试一下。 二、题目简介 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单…