5.20华为OD机试真题 新系统 - 等距二进制判断 (JavaPyCC++JsGo)

发布时间:2026/7/30 1:58:44
5.20华为OD机试真题 新系统 - 等距二进制判断  (JavaPyCC++JsGo) 等距二进制判断2026 华为OD机试真题 5月20日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述对于一个二进制数我们定义相邻两个 1 之间 0 的数量为他们两个之间的距离如 1001011相邻两个 1 之间的距离从左到右分别为 2、1、0。现在如果一个整数转化为二进制数满足如下条件包含不少于 3 个 1所有相邻数字 1 之间的距离相同 我们称之为等距二进制如 2121二进制为1010110101、6060二进制为111100111100、146146二进制为1001001010010010。2026 华为OD机试真题 5月20日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解输入描述现给定一个输入整数 0 n (2^31 - 1)输出描述如果 n 是等距二进制请输出它的距离如果不是等距二进制请输出 -1示例1输入21输出1说明二进制为 10101距离为 1示例2输入60输出0说明二进制为 111100111100距离为 0示例3输入146输出2说明二进制为 10010010距离为 2示例4输入2输出-1说明二进制为 10不满足条件 1非等距二进制解题思路问题本质判断一个整数的二进制表示中所有相邻 1 之间的 0 的数量是否全部相等。算法步骤提取所有 1 的位置从低位到高位遍历整数的二进制位将所有值为 1 的 bit 位置记录到数组中。条件一检查若 1 的总个数少于 3 个则直接判定为非等距二进制因为两个间隔无法定义所有。计算标准距离取前两个 1 之间的 0 的个数作为基准距离distance positions[1] - positions[0] - 1。逐一比对遍历后续每对相邻 1计算它们之间的 0 的个数若与基准距离不一致则非等距二进制。返回结果所有间隔一致则返回基准距离否则返回 -1。复杂度分析时间复杂度: O(k)其中 k 为二进制位数不超过 31 位只需遍历一次。空间复杂度: O(k)最坏情况下存储所有 1 的位置不超过 3