等距二进制判断
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
输出
说明
二进制为 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
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/474
文章版权归作者所有,未经允许请勿转载。
THE END