【位运算-简单】面试题 05.03. 翻转数位

翻转数位[给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度] 翻转数位 给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。 示例 1: 输入: num = 1775(110111011112) 输出: 8 示例 2: 输入: num = 7(01112) 输出: 4 方法是真的巧妙 其中count代表的就是连续的1的个数,len是代表能够取到的包括改一位之后连续1的值 当这一位是1的时候 count和len都++ 但是当这一位是0的时候 此时的len=count+1 相当于将前面连续的1的位数加上这一位是 阅读详情

【题目】
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
【示例 1】
输入: num = 1775(110111011112)
输出: 8
【示例 2】
输入: num = 7(01112)
输出: 4
【代码】
【Python】
在这里插入图片描述

class Solution:
    def reverseBits(self, num: int) -> int:
        if num<0:
            temp=bin(num)[3:]
            s=list("{0:1>32}".format(temp))
            i=31
            for i in range(31,31-len(temp),-1):
                s[i]='0' if s[i]=='1' else '1'
            num=int("".join(s),2)+1
        num_s=list(bin(num)[2:]+"0")
        pos=[]
        cnt=0
        for index,c in enumerate(num_s):
            if c=='0':
                pos.append([index-1,cnt])
                cnt=0
            else:
                cnt+=1
        if len(pos)==1:
            print(num)
            if len(num_s)<=33:
                return min(pos[0][1]+1,32)
            else:
                return pos[0][1]
        maxlen=0
        for i in range(1,len(pos)):
            if (pos[i][0]-pos[i][1]-1)==pos[i-1][0]:
                maxlen=max(maxlen,pos[i][1]+pos[i-1][1]+1)
        return maxlen

【方法2:双指针】
在这里插入图片描述

class Solution:
    def reverseBits(self, num: int) -> int:
        pre, cur =0, 0
        res = 1
        for i in range(32):
            if num & (1<<i):
                cur+=1
            else:
                res=max(res, pre+cur)
                pre = cur +1
                cur = 0
        res=max(res, pre+cur)
        return res
面试题 05.03. 翻转数位 通过位运算和滑动窗口方法,我们成功地解决了这个问题。该方法不仅处理了负数和特殊情况,还能在常数时间内计算结果。滑动窗口技术是一种高效的解决连续子序列问题的策略,尤其在处理二进制数时,能够大大提升性能。希望本文能帮助你更好地理解位运算和滑动窗口的应用,解决这类二进制相关的题目。 阅读详情

相关推荐

用matlab编程求矩阵的极大无关组,向量组极大无关组表示问题

已知向量组T:Eqn11.gif (3.16 KB, 下载次数: 1)2013-10-21 19:19 上传.(1) 求向量组T的秩,并判断向量组T的相关性;(2) 求T的极大线性无关组;(3) 将其余的向量用所求的极大线性无关组线性表示。程序:>> A=[1 1 3 2;-1 1 -1 3;5-2 8 9;-1 3 1 7]>> r=rank(A)>> A1=...

weixin_35094083的博客 7389

【力扣】面试05.03:翻转数位

题目描述 给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。 算法思路 分为两种状态讨论,一个是数字n的二进制形式里没有0,那么最长串的长度为二进制的长度+1 第二种情况是二进制串里有0,那么bin(num)[2:].split('0'),取得所有的非0字段,只能修改一个数位,所以遍历列表,相连两个字段长度+1就是新字段。 class Solution: def reverseBits(self, num: int) -> int:

Heart_for_Ling的博客 521

手把手教你用野火FPGA开发板资料包安装ModelSim 10.5se(附破解教程)

本文提供了一份详细的指南,手把手教你为野火FPGA开发板安装和配置ModelSim 10.5se仿真工具。内容涵盖从前期准备、软件安装、许可证激活(学习用途)到环境验证的全过程,并简要介绍了如何与Xilinx Vivado开发套件集成,帮助初学者快速搭建稳定的FPGA仿真环境。

lstm7chronicler的博客 251

翻转位数:给定一个32位整数 `num`,你可以将一个数位从0变为1。

bitset相当于一个数组,数组中存放的是num这个整数的每一位上的0/1情况,但使用时必须给定大小,如果一开始不确定大小,只能使用vector。比如,这道题我们已知是32位整数,所以我们直接用整数进行数组的初始化,给定数组的大小为32。bitset bit(num),这样直接就可以获得num的每一位,可以通过下标进行查找1或0。只有flag=true,res=len1+len2+1,否则,只能是len2+1(一段长度+翻转一位)请编写一个程序,找出你能够获得的最长的一串1的长度。

m0_58681055的博客 373

如何通过 GitHub Actions 使用 SSH 自动化部署到阿里云 ECS 实例

通过 GitHub Actions 和 SSH 自动化部署,可以显著提高你的开发效率和部署的可靠性。本文介绍了如何生成 SSH 密钥、将公钥添加到阿里云 ECS 实例、将私钥添加到 GitHub Secrets,以及编写 GitHub Actions 工作流来实现自动化部署。希望这篇文章对你有所帮助!

吃面不喝汤的博客 1514

ubuntu-emto-cpa 测试和使用(单核运行)

ubuntu-emto-cpa 测试和使用(单核运行)

qq_45834835的博客 1403

程序员面试金典-0503-翻转数位

程序员面试金典-0503-翻转数位 给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。 示例 1: 输入: num = 1775(110111011112) 输出: 8 示例 2: 输入: num = 7(01112) 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-bits-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 i

MyNuTh的博客 227

后台管理系统-7-vue3之引入配置文件baseURL

mock=false,本地模拟。mock=true,线上模拟。baseURL+url=实际请求的URL。get请求param参数,post请求data参数。

qq_20466211的博客 208

力扣面试题 26 - 翻转数位

每次遇到一个 0 时,考虑将其变为 1,并将其两边的连续 1 段合并。如果连续 1 的段之间有一个 0 的间隔,合并后的长度为两段长度之和加 1。如果输入是负数(有符号整数的情况),需要特别注意其二进制补码表示。否则,如果输入本身已经是全 1 的情况,也需要特殊处理(无需修改即可输出结果)。请编写一个程序,找出你能够获得的最长的一串1的长度。中哪些部分连续包含 1,可以通过逐位扫描来实现。记录每一段连续的 1 的长度。遍历整个二进制位的过程中,维护一个变量用于记录最大连续 1 的长度,实时更新。

chamao_的博客 462

基于STM32L4XX、HAL库的MP2672GD-0000-Z充电芯片驱动程序设计

CHG_STAT_GPIO_Port, CHG_STAT_Pin, // 这些宏应由 CubeMX 生成在 main.h。

zhusl6688的博客 498

乌鸦搜索算法(CSA)详解:从鸟类智能到优化引擎

乌鸦搜索算法(Crow Search Algorithm,CSA)是2016年由Askarzadeh等人提出的一种新型元启发式优化算法,该算法灵感来源于自然界中乌鸦群体的智能觅食行为。这一创新性算法已成为群体智能优化算法家族中的重要成员,与粒子群优化、遗传算法等传统算法相比,CSA具有原理新颖、参数设置简单、全局搜索能力强等特点。

qq_42212808的博客 1278

面试题 05.03. 翻转数位 ( 位运算 + 迭代 / 双指针 )

LeetCode: 面试题 05.03. 翻转数位 位运算 题 难点, 怎么记录每个 0 左右连续的 1 的个数 。 思路: curlen 记录当前连续 1 的长度 prelen 记录上次连续1的长度 AC Code class Solution { public int reverseBits(int num) { int mx = 0; // curlen 当前长度, prelen 上一段长度 int curlen = 0, prele

lankerens 419

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

1947

Leetcode 面试题 05.03. 翻转数位

Leetcode 面试题 05.03. 翻转数位 详解!

这里是Mae。 660

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Leetcode: 面试题 05.03. 翻转数位(位运算)

面试题 05.03. 翻转数位 给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。 示例 1: 输入: num = 1775(110111011112) 输出: 8 示例 2: 输入: num = 7(01112) 输出: 4 通过次数1,842提交次数3,835 这道题有点意思,做法也很有意思,每次遇到0更新数据,更新长度, 求出0左边和右边的长度,每次又让左边的值变为右边的值,一直到结束 class Solution { public:

stackempty2的博客 417

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

程序员面试金典 - 面试题 05.03. 翻转数位(位运算)

1. 题目 给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。 示例 1: 输入: num = 1775(11011101111) 输出: 8 示例 2: 输入: num = 7(0111) 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-bits-lc...

Michael是个半路程序员 1227

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

程序员面试金典——面试题 05.03. 翻转数位

一、题目介绍 给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。 示例 1: 输入: num = 1775(110111011112) 输出: 8 示例 2: 输入: num = 7(01112) 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-bits-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 二、解题思路 ..

Asher 455

【剑指Offer】面试题 05.03. 翻转数位

题目 给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。 示例 输入: num = 1775(110111011112) 输出: 8 输入: num = 7(01112) 输出: 4 提前知道的概念 位运算 n & (1 << i) 首先:1 << i的含义是将i左移i位,如 1<<2 则0001->0100 那么n & (1 << i)就是计算n的第i位(从右数) 解法、

HY_shen的博客 195

《程序员面试金典》解题目录(更新完毕)

题目来源于LeetCode上的《程序员面试金典》,这里做一个目录方便大家查找。另外有本人的LeetCode解题目录、《剑指Offer》解题目录可点击链接查看。

Michael是个半路程序员 6411

leetcode面试题6

leetcode面试题关于位运算部分(挺难,对于我这种)

weixin_50285694的博客 466

Leetcode算法题-位运算

201. 数字范围按位与 https://leetcode-cn.com/problems/bitwise-and-of-numbers-range/ public int rangeBitwiseAnd(int m, int n) { int shift = 0; while (m < n) { m >>= 1; n >>= 1; shift++; }

qq_27534691的博客 168

位运算

389. 找不同 389. 找不同 给定两个字符串 s 和 t,它们只包含小写字母。 字符串t由字符串s随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例: 输入: s = "abcd" t = "abcde" 输出: e 解释: 'e' 是那个被添加的字母。 1.新加的那个字符其实是s和t之间Ascill的差值 2.只有一个东西出现1次,其他出现2次,明显的异或运算!,但只有数字才能异或,所以将字符转换成数字! class Solut...

北歌的博客 247

《程序员面试金典(第6版)》面试题 05.03. 翻转数位(贪心算法思想,C++)

这道题对我来说,确实也不算是一道难题,但也没那么简单。如果我对动态规划与双指针掌握的更好了话,这道题或许会更加的简单。后序,我会更新双指针与动态规划的做法。

weixin_49503250的博客 204

leetcode-位运算

目录231. 2的幂342. 4的幂面试题 05.01. 插入面试题 05.03. 翻转数位面试题 05.06. 整数转换405. 数字转换为十六进制数面试题 17.01. 不用加号的加法371. 两整数之和268. 缺失数字190. 颠倒二进制位693. 交替位二进制数389. 找不同169. 多数元素面试题 17.04. 消失的数字784. 字母大小写全排列1356. 根据数字二进制下 1 的数目排序剑指 Offer 39. 数组中出现次数超过一半的数字762. 二进制表示中质数个计算置位191. 位1

qq_33287871的博客 996

DAY51 LeetCode 学习笔记

面试题 05.03. 翻转数位前言题目源码 前言 位运算,逐一比较每一位,记录当前位1的个数,和0之后1的个数 题目 官方题目 源码 class Solution { public int reverseBits(int num) { int l=0,r=0,ans=0;//l为0左边的1个数,r是右边 for(int i=0;i<32;i++){ if((num & 1)==1){ r++;//

UpUp的博客 91
上一篇: 【位运算-简单】面试题 17.01. 不用加号的加法(复习)
下一篇: 【Git】fatal: unable to access ‘http://gitlab.example.com/root/test_gitlab.git/‘: Could not resolve ho
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值