• 华为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源码:

    1. public static void main(String[] args) {
    2. Scanner scanner = new Scanner(System.in);
    3. String line = scanner.nextLine();
    4. int vlanId = Integer.parseInt(scanner.nextLine());
    5. String[] split = line.split(",");
    6. int n = split.length;
    7. List<int[]> intervals = new ArrayList<>();
    8. for (int i = 0; i < n; i++) {
    9. String id = split[i];
    10. int[] interval = new int[2];
    11. // 有 “-” 符号说明是一个区间
    12. if (id.contains("-")) {
    13. String[] points = id.split("-");
    14. interval[0] = Integer.parseInt(points[0]);
    15. interval[1] = Integer.parseInt(points[1]);
    16. } else {
    17. interval[0] = Integer.parseInt(id);
    18. interval[1] = Integer.parseInt(id);
    19. }
    20. intervals.add(interval);
    21. }
    22. // 排序
    23. Collections.sort(intervals, (a, b)->a[0] - b[0]);
    24. // 删除申请的 VLAN
    25. for (int i = 0; i < n; i++) {
    26. // 要删除的 id 不会包含在后面的任何一个区间内
    27. if (intervals.get(i)[0] > vlanId) {
    28. break;
    29. }
    30. // 要删除的 id 所在区间已经被找到
    31. if (intervals.get(i)[0] <= vlanId && intervals.get(i)[1] >= vlanId) {
    32. if (intervals.get(i)[0] == intervals.get(i)[1]) {
    33. // 如果该区间只有一个 id
    34. intervals.remove(i);
    35. } else {
    36. if (intervals.get(i)[0] == vlanId) {
    37. // 删除的点是区间的左边界
    38. intervals.get(i)[0]++;
    39. } else if (intervals.get(i)[1] == vlanId) {
    40. // 删除的点是区间的右边界
    41. intervals.get(i)[1]--;
    42. } else {
    43. // 该区间有多个 id,且删除目标 id 后区间一分为二
    44. intervals.add(i, new int[]{vlanId + 1, intervals.get(i)[1]});
    45. intervals.add(i, new int[]{intervals.get(i + 1)[0], vlanId - 1});
    46. intervals.remove(i + 2);
    47. }
    48. }
    49. break;
    50. }
    51. }
    52. // 输出
    53. int size = intervals.size();
    54. for (int i = 0; i < size - 1; i++) {
    55. if (intervals.get(i)[0] == intervals.get(i)[1]) {
    56. System.out.print(intervals.get(i)[0] + ",");
    57. } else {
    58. System.out.print(intervals.get(i)[0] + "-" + intervals.get(i)[1] + ",");
    59. }
    60. }
    61. if (intervals.get(size - 1)[0] == intervals.get(size - 1)[1]) {
    62. System.out.println(intervals.get(size - 1)[0]);
    63. } else {
    64. System.out.println(intervals.get(size - 1)[0] + "-" + intervals.get(size - 1)[1]);
    65. }
    66. }

  • 相关阅读:
    超自动化的未来
    .NET 8 Video教程介绍(开篇)
    典型卷积神经网络算法(AlexNet、VGG、GoogLeNet、ResNet)
    鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统
    微服务--熔断降级
    深化校企合作 搭建技术技能人才成长“立交桥”
    阿里架构师深度学习java虚拟机心得PDF、不愧是进了阿里的大牛
    手把手教你IDEA创建SSM项目结构
    中秋不加班,猿人永不屈服!!! So,How to celebrate the Mid Autumn Festival?
    《工程伦理与学术道德》之《工程中的风险、安全与责任》
  • 原文地址:https://blog.csdn.net/qq_43714918/article/details/132655816