**信道资源分配与掩码运算**
2026 华为OD机试真题8月16日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
在进行信道资源分配时,需要通过掩码(Bitmask)来高效管理可用信道的状态。每个信道对应掩码中的一个二进制位(位置为 1 表示信道可用,位置为 0 表示信道被占用)。掩码状态编码以不同进制格式(二进制、十进制、十六进制)存储在配置文件中,由 64 位无符号整数表示(二进制从低位到高位对应信道 0 到信道 63),掩码的输入格式为带进制标识的字符串:
- 二进制字符串:以
0b开头(如0b1011); - 十六进制字符串:以
0x开头(如0x1A3); - 十进制字符串:无特殊前缀(如
255)。
为了优化资源利用率,需计算两组可用信道的集合:交集、并集,以及统计连续可用信道的最大长度(连续 1 的最长子串);请实现一个函数完成以下操作:
- 将两个输入的掩码字符串(
maskStrA、maskStrB)转为 64 位无符号整数; - 计算两个掩码的可用信道交集(仅保留两个掩码中都为 1 的位);
- 计算两个掩码的可用信道并集(保留任意一个掩码中为 1 的位);
- 统计两个掩码的连续可用信道最大长度(二进制中连续 1 的最长长度)。
函数需返回一个长度为 3 的数组(十进制整数),依次包含:交集结果、并集结果、最大连续可用信道长度。
2026 华为OD机试真题8月16日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
输入描述
输入字符串仅包含合法的进制格式(无需处理非法输入);
掩码值范围为 0 <= mask <= 2^64 - 1,超出范围的输入不存在;
二进制字符串长度不超过 64 位,十六进制字符串长度不超过 16 位;
连续可用信道长度计算规则:全 0 掩码返回 0,全 1 掩码返回 64。
输入为一行,两个掩码字符串使用英文逗号分隔:
maskStrA,maskStrB
输出描述
输出一个长度为 3 的数组(十进制整数),依次包含:交集结果、并集结果、最大连续可用信道长度。
数组格式中不包含空格,例如:
[9,15,4]
示例1
输入
0b1011,0b1101
输出
[9,15,4]
说明
- 进制转换:0b1011=11(十进制),0b1101=13(十进制);
- 交集:11&13=9(十进制);
- 并集:11|13=15(十进制);
- 并集的二进制为 0b1111,连续 1 的最长长度为 4。
示例2
输入
0,0xCC
输出
[0,204,2]
说明
- 进制转换:0(十进制)=0,0xCC=204(十进制);
- 交集:0&204=0;
- 并集:0|204=204(二进制 0b11001100);
- 并集的连续 1 最长长度为 2。
解题思路
核心思想
先根据前缀把两个掩码字符串转成 64 位无符号整数,再用位运算得到交集和并集。
最长连续可用信道长度只需要统计并集掩码中连续 1 的最长长度。因为只考虑 64 位,所以固定循环 64 次即可。
算法步骤
- 读取一行输入,按英文逗号拆成两个掩码字符串。
- 根据
0b、0x或无前缀解析为整数。 - 计算
intersect = a & b。 - 计算
union = a | b。 - 从低位到高位遍历并集的 64 个二进制位,维护当前连续
1的长度和最大长度。 - 按
[intersect,union,maxLen]格式输出。
复杂度分析
- 时间复杂度:
O(1),固定处理 64 位。 - 空间复杂度:`O(