建设工程质量安全管理协会网站,怎么做兼职网站吗,手机app用什么软件制作,免费网站建设建议题目描述#xff1a; VLAN是一种对局域网设备进行逻辑划分的技术#xff0c;为了标识不同的VLAN#xff0c;引入VLAN ID(1-4094之间的整数)的概念。 定义一个VLAN ID的资源池(下称VLAN资源池)#xff0c;资源池中连续的VLAN用开始VLAN-结束VLAN表示#xff0c;不连续的用单…
题目描述 VLAN是一种对局域网设备进行逻辑划分的技术为了标识不同的VLAN引入VLAN ID(1-4094之间的整数)的概念。 定义一个VLAN ID的资源池(下称VLAN资源池)资源池中连续的VLAN用开始VLAN-结束VLAN表示不连续的用单个整数表示所有的VLAN用英文逗号连接起来。现 在有一个VLAN资源池业务需要从资源池中申请一个VLAN需要你输出从VLAN资源池中移除申请的VLAN后的资源池。
输入描述
第一行为字符串格式的VLAN资源池
第二行为业务要申请的VLANVLAN的取值范围为[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。 输入 20-21,15,18,30,5-10 15
输出 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。
输入 5,1-3 10
输出 1-3,5
说明 原VLAN资源池中有VLAN 1、2、35申请的VLAN 10不在原资源池中将原资源池按照题目描述格式并按升序排序后输出的结果为1-3,5。 java 程序
package com.tarena.test.B10;
import java.util.Arrays; import java.util.LinkedList; import java.util.Scanner; import java.util.StringJoiner; import java.util.stream.Collectors;
/** * 题目描述 VLAN是一种对局域网设备进行逻辑划分的技术为了标识不同的VLAN引入VLAN ID(1-4094之间的整数)的概念。 定义一个VLAN ID的资源池(下称VLAN资源池)资源池中连续的VLAN用开始VLAN-结束VLAN表示不连续的用单个整数表示所有的VLAN用英文逗号连接起来。现 在有一个VLAN资源池业务需要从资源池中申请一个VLAN需要你输出从VLAN资源池中移除申请的VLAN后的资源池。
输入描述
第一行为字符串格式的VLAN资源池
第二行为业务要申请的VLANVLAN的取值范围为[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。
输入 20-21,15,18,30,5-10 15
输出 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。
输入 5,1-3 10
输出 1-3,5
说明 原VLAN资源池中有VLAN 1、2、35申请的VLAN 10不在原资源池中将原资源池按照题目描述格式并按升序排序后输出的结果为1-3,5。 * author Administrator * */ public class B13 { public static void main(String[] args) { try(Scanner sc new Scanner(System.in);){ String vlans sc.nextLine(); Integer need Integer.parseInt( sc.nextLine()); System.out.println(resultStr(vlans,need)); } } public static String resultStr(String vlans,Integer need) { String[] vlanStr vlans.split(,); LinkedListInteger[] list Arrays.stream(vlanStr).map( temp-Arrays.stream(temp.split(-)).map(Integer::parseInt).toArray(Integer[]::new))// .sorted((a,b)- (a[0] - b[0]) ) .collect(Collectors.toCollection(LinkedList::new)); for(int i0;ilist.size();i) { Integer[] tempArr list.get(i); if(tempArr.length1) { if(tempArr[0]need) { list.remove(i); break; } }else { //比结尾大。结束本次循环 if(needtempArr[1]) { continue; } //比开始小结束本次循环而且需要的数不存在 if(needtempArr[0]) { break; } //结尾的值 if(needtempArr[1]) { list.set(i, newArray(tempArr[0],tempArr[1]-1));//List 的set 方法与add方法这里可以变换使用。如果用add前面要先调用删除 remove(i); //开始的值 }else if(needtempArr[0]){ list.set(i, newArray(tempArr[0]1,tempArr[1])); }else { //list.remove(i); //先添加后面的数组 list.set(i, newArray(need1,tempArr[1])); //再添加前面的数组刚添加的数组自动向后一位 list.add(i, newArray(tempArr[0],need-1)); } break; } } //拼接字符串处理类 StringJoiner returnStr new StringJoiner(,); list.stream().map(arr - { if(arr.length1) {//这一块有人也是用的 StringJoiner 来实现 大家觉得哪种方式好呢 return arr[0]-arr[1]; }else { return arr[0]; } } ).forEach(returnStr::add);//temp1 - returnStr.add(temp1) return returnStr.toString(); } public static Integer[] newArray(Integer begin,Integer end) { if(begin end) { return new Integer[] {begin,end}; }else { return new Integer[] {begin}; } } } 了解知识点
1、StringJoiner 类之前自己写过类似的功能类但是不知道java自带的这个类
2、Arrays 感觉很久没有用这个工具类专门处理数组的类
3、Stream 流的使用 里面的.map(), .sort(),.collect()等发放使用还有.forEach等方法