当前位置: 首页 > news >正文

华为OD:VLAN资源池

题目描述:

VLANO 是一种对局域网设备进行逻辑划分的技术,为了标识不同的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

说明

原VLAN资源池中有VLAN 1、2、3、4、5,从资源池中移除2后,剩下VLAN 1、3、4、5,按照题目描述格式并升序后的结果为1,3-5.

Java源码:

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String line = scanner.nextLine();int vlanId = Integer.parseInt(scanner.nextLine());String[] split = line.split(",");int n = split.length;List<int[]> intervals = new ArrayList<>();for (int i = 0; i < n; i++) {String id = split[i];int[] interval = new int[2];// 有 “-” 符号说明是一个区间if (id.contains("-")) {String[] points = id.split("-");interval[0] = Integer.parseInt(points[0]);interval[1] = Integer.parseInt(points[1]);} else {interval[0] = Integer.parseInt(id);interval[1] = Integer.parseInt(id);}intervals.add(interval);}// 排序Collections.sort(intervals, (a, b)->a[0] - b[0]);// 删除申请的 VLANfor (int i = 0; i < n; i++) {// 要删除的 id 不会包含在后面的任何一个区间内if (intervals.get(i)[0] > vlanId) {break;}// 要删除的 id 所在区间已经被找到if (intervals.get(i)[0] <= vlanId && intervals.get(i)[1] >= vlanId) {if (intervals.get(i)[0] == intervals.get(i)[1]) {// 如果该区间只有一个 idintervals.remove(i);} else {if (intervals.get(i)[0] == vlanId) {// 删除的点是区间的左边界intervals.get(i)[0]++;} else if (intervals.get(i)[1] == vlanId) {// 删除的点是区间的右边界intervals.get(i)[1]--;} else {// 该区间有多个 id,且删除目标 id 后区间一分为二intervals.add(i, new int[]{vlanId + 1, intervals.get(i)[1]});intervals.add(i, new int[]{intervals.get(i + 1)[0], vlanId - 1});intervals.remove(i + 2);}}break;}}// 输出int size = intervals.size();for (int i = 0; i < size - 1; i++) {if (intervals.get(i)[0] == intervals.get(i)[1]) {System.out.print(intervals.get(i)[0] + ",");} else {System.out.print(intervals.get(i)[0] + "-" + intervals.get(i)[1] + ",");}}if (intervals.get(size - 1)[0] == intervals.get(size - 1)[1]) {System.out.println(intervals.get(size - 1)[0]);} else {System.out.println(intervals.get(size - 1)[0] + "-" + intervals.get(size - 1)[1]);}
}

http://www.lryc.cn/news/157493.html

相关文章:

  • 大学大创项目:手机室内AR导航APP项目思路
  • OpenSSL加解密算法使用方法
  • Excel VSTO开发10 -自定义任务面板
  • 百度智能云千帆大模型丨未来人手必备的代码助手
  • 美客多平台经营秘籍:为何测评补单操作是必要的?
  • AArch64内存管理
  • 导出Excel的技术分享-综合篇
  • iPhone 14四款机型电池容量详细参数揭秘
  • Python功能强大、灵活可扩展的Statsmodels库
  • AcWing 4405. 统计子矩阵(每日一题)
  • Kali Linux渗透测试技术介绍【文末送书】
  • GPT与BERT模型
  • 2023-09-06力扣每日一题-摆烂暴力
  • 【Flutter】Flutter 使用 timego 将日期转换为时间描述
  • 并发容器11
  • Java8实战-总结22
  • matlab 实现点云ICP 配准算法
  • python提取word文本和word图片
  • iOS开发Swift-9-SFSymbols,页面跳转,view屏幕比例,启动页-和风天气AppUI
  • 代码优化工具-测试程序执行时间-IDEAdebug+StopWatch
  • 力扣每日一题---2594. 修车的最少时间
  • 【jvm】运行时数据区
  • SpringMVC相对路径和绝对路径
  • IIS perl python cbrother php脚本语言配置及简单测试样例程序
  • Oracle Scheduler中日期表达式和PLSQL表达式的区别
  • Java设计模式:一、六大设计原则-06:依赖倒置原则
  • 信息系统数据同步解决方案
  • LRU算法 vs Redis近似LRU算法
  • 浅析ARMv8体系结构:异常处理机制
  • Golang开发--Goroutine的使用