华为OD:VLAN资源池

news/2024/7/20 17:09:32 标签: 华为od, java

题目描述:

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源码:

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]);

    // 删除申请的 VLAN
    for (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]) {
                // 如果该区间只有一个 id
                intervals.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.niftyadmin.cn/n/4998214.html

相关文章

使用Java Bean Validation API非空校验

1.在实体中添加NotNull注解 先定义一个实体类 import javax.validation.constraints.NotNull;public class UserNotNullprivate String name;NotNullprivate String sex;NotNullprivate String age; }2.创建验证器&#xff0c;验证实体类 import javax.validation.Constrain…

无涯教程-JavaScript - WEIBULL函数

WEIBULL函数取代了Excel 2010中的WEIBULL.DIST函数。 描述 该函数返回威布尔分布。在可靠性分析中使用此分布,如计算设备的平均故障时间。 语法 WEIBULL(x,alpha,beta,cumulative)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.Requir…

A Mathematical Framework for Transformer Circuits—Part (1)

A Mathematical Framework for Transformer Circuits 前言Summary of ResultsREVERSE ENGINEERING RESULTSCONCEPTUAL TAKE-AWAYS Transformer OverviewModel SimplificationsHigh-Level ArchitectureVirtual Weights and the Residual Stream as a Communication ChannelVIRTU…

自然语言处理:提取长文本进行文本主要内容(文本意思)概括 (两种方法,但效果都一般)

本文主要针对长文本进行文本提取和中心思想概括&#xff0c;原文档放在了附件里面&#xff1a;<科大讯飞公告> -----------------------------------方法一&#xff1a;jieba分词提取文本&#xff08;句子赋分法&#xff09;------------------------- 1、首先导入相关…

B. Long Long

time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Today Alex was brought array a1,a2,…,an&#xfffd;1,&#xfffd;2,…,&#xfffd;&#xfffd; of length n&#xfffd;. He can apply as m…

golang-bufio 缓冲写

1. 缓冲写 在阅读这篇博客之前&#xff0c;请先阅读上一篇&#xff1a;golang-bufio 缓冲读 // buffered output// Writer implements buffering for an io.Writer object. // If an error occurs writing to a Writer, no more data will be // accepted and all subsequent…

直播程式源码平台细讲HTTP协议:超文本传输

HTTP协议的简介 HTTP协议是一种数据通信协议&#xff0c;是浏览器与服务器之间的协议&#xff0c;HTTP协议的中文全称为超文本传输协议&#xff0c;HTTP协议在直播程式源码平台中&#xff0c;承载着数据传输的重要任务&#xff0c;用户可以通过HTTP协议获取直播程式源码平台中提…

javaee 事务 事务的特性 事务的并发问题 事务的隔离级别

什么是事务(Transaction) 是并发控制的单元&#xff0c;是用户定义的一个操作序列。这些操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的工作单位。通过事务&#xff0c;sql 能将逻辑相关的一组操作绑定在一起&#xff0c;以便服务器 保持数据的完整性。事务…