蓝桥杯day03——二进制间距

1.题目

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的最长距离 。如果不存在两个相邻的 1,返回 0

如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。

示例 1:

复制代码
输入:n = 22
输出:2
解释:22 的二进制是 "10110" 。
在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。
第一对相邻的 1 中,两个 1 之间的距离为 2 。
第二对相邻的 1 中,两个 1 之间的距离为 1 。
答案取两个距离之中最大的,也就是 2 。

示例 2:

复制代码
输入:n = 8
输出:0
解释:8 的二进制是 "1000" 。
在 8 的二进制表示中没有相邻的两个 1,所以返回 0 。

示例 3:

复制代码
输入:n = 5
输出:2
解释:5 的二进制是 "101" 。

提示:

  • 1 <= n <= 109

2.解析

这个方法的作用是找到给定整数n的二进制表示中连续的"1"之间的最大间隔。如果整数只包含一个"1",则返回0;否则,返回最大间隔。

首先,将整数n转换为二进制字符串,然后使用切片[2:]去掉前两个字符('0b'),得到纯二进制字符串s

然后,初始化一个空列表ls,用于存储二进制表示中所有"1"的索引位置。

统计二进制字符串s中"1"的数量,如果数量小于等于1,则意味着在二进制表示中只有一个"1",因此返回0。

如果二进制字符串s中"1"的数量大于1,使用列表推导式找到二进制字符串s中所有"1"的索引位置,并将它们存储在列表ls中。

初始化变量max_d为0,用于存储最大间隔。遍历列表ls中的所有元素,计算当前元素和下一个元素之间的间隔,并存储在变量d中。如果当前间隔d大于之前的最大间隔max_d,则更新max_d为当前间隔。否则,保持不变。

最后,返回最大间隔作为结果。

3.python代码

python 复制代码
class Solution:
    def binaryGap(self, n: int) -> int:
        s=bin(n)[2:]
        ls=[]
        if s.count("1")<=1:
            return 0
        else:
            ls=[i for i in range(len(s)) if s[i]=="1"]
            max_d=0
            for i in range(len(ls)-1):
                d=ls[i + 1] - ls[i]
                max_d=d if d>max_d else max_d

            return max_d

4.运行结果

相关推荐
weixin_307779133 小时前
使用Python高效读取ZIP压缩文件中的UTF-8 JSON数据到Pandas和PySpark DataFrame
开发语言·python·算法·自动化·json
哎呀呦呵3 小时前
python内置模块-re模块介绍使用
java·python·mysql
paoqi 包奇4 小时前
pycharm中使用anaconda指定虚拟环境
ide·python·pycharm
fsnine4 小时前
图像视觉——颜色识别
图像处理·python·计算机视觉
小张的博客之旅4 小时前
2025年“羊城杯”网络安全大赛 线上初赛 (WriteUp)
python·学习·网络安全
Kaydeon4 小时前
【AIGC】50倍加速!NVIDIA蒸馏算法rCM:分数正则化连续时间一致性模型的大规模扩散蒸馏
人工智能·pytorch·python·深度学习·计算机视觉·aigc
B站_计算机毕业设计之家5 小时前
大数据实战:Python+Flask 汽车数据分析可视化系统(爬虫+线性回归预测+推荐 源码+文档)✅
大数据·python·数据分析·flask·汽车·线性回归·预测
晚枫~5 小时前
零基础快速上手Playwright自动化测试
javascript·python·测试工具·c#·自动化
该用户已不存在6 小时前
Python项目的5种枚举骚操作
后端·python
mortimer6 小时前
从 Python+venv+pip 迁移到 uv 全过程 及 处理 torch + cuda 的跨平台指南
pytorch·python·macos