输出:
1-3,5
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
说明 原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。
输出结果:
使用格式化函数将修改后的列表转换回范围形式并输出
def parse_vlans(vlan_str):
vlans = []
for part in vlan_str.split(','):
if '-' in part:
start, end = map(int, part.split('-'))
vlans.extend(range(start, end + 1))
else:
vlans.append(int(part))
return sorted(vlans)
def format_vlans(vlans):
result = []
i = 0
while i < len(vlans):
start = vlans[i]
while i + 1 < len(vlans) and vlans[i + 1] == vlans[i] + 1:
i += 1
end = vlans[i]
if start == end:
result.append(f"{start}")
else:
result.append(f"{start}-{end}")
i += 1
return ",".join(result)
vlan_pool = parse_vlans(input())
to_remove = int(input())
if to_remove in vlan_pool:
vlan_pool.remove(to_remove)
print(format_vlans(vlan_pool))
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
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);
String[] inputArr = sc.nextLine().split(",");
int reqVlan = Integer.parseInt(sc.nextLine());
System.out.println(solve(inputArr, reqVlan));
}
public static String solve(String[] pool, int reqVlan) {
List<int[]> vlanList = new ArrayList<>();
for (String part : pool) {
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]));
for (int i = 0; i < vlanList.size(); i++) {
int[] vlan = vlanList.get(i);
if (reqVlan >= vlan[0] && reqVlan <= vlan[1]) {
vlanList.remove(i);
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);
}
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
C++解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: