等距二进制判断

2026 华为OD机试真题 5月20日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

对于一个二进制数,我们定义相邻两个 1 之间 0 的数量为他们两个之间的距离,如 1001011,相邻两个 1 之间的距离从左到右分别为 2、1、0。

现在如果一个整数转化为二进制数满足如下条件:

  1. 包含不少于 3 个 1
  2. 所有相邻数字 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

输出

说明

二进制为 111100111100,距离为 0

示例3

输入

146

输出

2

说明

二进制为 10010010,距离为 2

示例4

输入

2

输出

-1

说明

二进制为 10,不满足条件 1,非等距二进制

解题思路

问题本质:判断一个整数的二进制表示中,所有相邻 1 之间的 0 的数量是否全部相等。

算法步骤

  1. 提取所有 1 的位置:从低位到高位遍历整数的二进制位,将所有值为 1 的 bit 位置记录到数组中。
  2. 条件一检查:若 1 的总个数少于 3 个,则直接判定为非等距二进制(因为两个间隔无法定义"所有")。
  3. 计算标准距离:取前两个 1 之间的 0 的个数作为基准距离 distance = positions[1] - positions[0] - 1
  4. 逐一比对:遍历后续每对相邻 1,计算它们之间的 0 的个数,若与基准距离不一致,则非等距二进制。
  5. 返回结果:所有间隔一致则返回基准距离,否则返回 -1。

复杂度分析

  • 时间复杂度: O(k),其中 k 为二进制位数(不超过 31 位),只需遍历一次。
  • 空间复杂度: O(k),最坏情况下存储所有 1 的位置(不超过 3
THE END