首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
课程
专栏·文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
人狠话不多的六边形战士很想去东北泡澡
西安电子科技大学 电子信息类
发布于北京
关注
已关注
取消关注
@牛客题解官:
二进制中1的个数
题目的主要信息:统计32位整型有符号数二进制中1的个数因负数用补码表示,故不能用连除法举一反三:学习完本题的思路你可以解决如下题目:JZ64. 求1+2+3+...+nJZ65. 不用加减乘除做加法方法一:循环按位比较法(推荐使用)知识点:位运算计算机的数字由二进制表示,我们平常的运算是对整个数字进行运算,但是还可以按照二进制的每一位分别进行运算。常见运算有位与、位或、移位、位异或等。思路:我们可以检查该数字的二进制每一位是否为1,如果遍历二进制每一位呢?可以考虑移位运算,每次移动一位就可以。至于怎么统计到1呢?我们都只知道数字1与数字相位与运算,其实只是最后一位为1就是1,最后一位为0就是0,这样我们只需要将数字1移位运算,就可以遍历二进制的每一位,再去做位与运算,结果为1的就是二进制中为1的。具体做法:step 1:遍历二进制的32位,通过移位0-31次实现。step 2:将移位后的1与数字进行位与运算,结果为1就记录一次。Java实现代码:public class Solution { public int NumberOf1(int n) { int res = 0; //遍历32位 for(int i = 0; i < 32; i++){ //按位比较 if((n & (1 << i)) != 0) res++; } return res; }}C++实现代码:class Solution {public: int NumberOf1(int n) { int res = 0; //遍历32位 for(int i = 0; i < 32; i++){ //按位比较 if((n & (1 << i)) != 0) res++; } return res; }};Python实现代码:class Solution: def NumberOf1(self , n: int) -> int: res = 0 #遍历32位 for i in range(32): #按位比较 if (n & (1 << i)) != 0: res += 1 return res复杂度分析:时间复杂度:O(k)O(k)O(k),kkk为int型的32位,一次遍历空间复杂度:O(1)O(1)O(1),常数级变量,没有额外辅助空间方法二:位运算优化法(扩展思路)思路:有一个性质:n&(n−1)n\&(n-1)n&(n−1),会将n的二进制中最低位由1变成0我们可以不断让当前的 nnn与 n−1n - 1n−1做位与运算,直到 nnn的二进制全部变为 0 停止。因为每次运算会使得 nnn 的最低位的 1 被翻转成0,因此运算次数就等于 nnn 的二进制位中 1 的个数,由此统计1的个数。具体做法:step 1:使用循环检查nnn是否为0.step 2:不为0就与n−1n-1n−1做位与运算,去掉二进制最后一位的1,并统计次数。图示:Java实现代码:public class Solution { public int NumberOf1(int n) { int res = 0; //当n为0时停止比较 while(n != 0){ n &= n - 1; res++; } return res; }}C++实现代码:class Solution {public: int NumberOf1(int n) { int res = 0; //当n为0时停止比较 while(n){ n &= n - 1; res++; } return res; }};Python实现代码:class Solution: def NumberOf1(self , n: int) -> int: res = 0 #负数转换 if n < 0: n &= 0xffffffff #当n为0时停止比较 while n: n &= n - 1 res += 1 return res复杂度分析:时间复杂度:O(log2n)O(log_2n)O(log2n),nnn为数字的大小,循环次数等于nnn的二进制位中1的个数,最坏情况下nnn的二进制位全部为1,也即开一个2的log运算空间复杂度:O(1)O(1)O(1),常数级变量,没有额外辅助空间
点赞 199
评论 18
全部评论
推荐
最新
楼层
网易互娱
校招火热招聘中
官网直投
相关推荐
我的梦想辣么大
05-20 19:50
门头沟学院 计算机类
阿里oc
被阿里录取的那一天,一切都将作废,之前的所有面试都作废,之前的所有offer都作废,之前的硕士学历作废,之前的本科学历作废,星星作废,月亮作废,银河系作废。上岸阿里的那一天,中国最好的互联网企业加持,就如同一场大雪覆盖了自己前半生的荒唐。
阿里巴巴开奖31人在聊
点赞
评论
收藏
转发
大杯无糖
05-16 22:05
门头沟学院 计算机类
二本漫漫求职路......
从23年7月份开始找,秋招的时候,一无所知,对于一个二本普通院校的学生,每天做的只能是海投,早上十点,打开boss直聘,用三十分钟投递满100份。 大致扫一眼,只要符合就嘎嘎投递,虽然我在校学的是golang,但是到现在为止,大部分的面试都是侧重于后端开发,不局限于具体的语言。 秋招投递了一个月,效果不理想,工资低的不想去,工资高的投递不进去。 还记得最初投递的时候,总是忍不住想盯着手机看boss回复没有,约到一场面试能激动高兴好久......最终海投了两个月,八月底面过了北京的一个初级算法工程师,九月底入职了。主要是搞python的,自己一点也没看过python,创业小公司,工资给的也挺高,...
查看3道真题和解析
春招你拿到offer了吗
点赞
评论
收藏
转发
爱敲代码的小刘
04-12 16:48
重庆大学城市科技学院 计算机类
求大佬看看哪里有问题求求了
点赞
评论
收藏
转发
飞龙在天__
04-26 16:22
哈尔滨工业大学 机械类
求改简历,只会STM32是不是太菜了
#牛客帮帮团来啦!有问必答#
牛客帮帮团来啦!有问必答
点赞
评论
收藏
转发
匿名牛油
不愿透露姓名的神秘牛友
05-17 09:33
已编辑
暑期实习选择
现在在阿里系某饿实习,mentor说组内甚至大组内应该就招我一个实习生,至少小组内就我自己,但面试我的直属主管最近离职了,而且本身就不多的hc可能秋招缩为0,Mentor也说公司一直在开源节流。在这感觉压力也比较大,mentor让我梳理文档,整理项目架构图之类的东西,问我要有思考(经典味道)。有次问我给我转正我来不来,我说大概率会,还抽风说实习最重要是丰富简历,他好像很不开心。感觉在这全是做业务,单纯做需求的话也学不到太多技术。我害怕表达强烈转正意愿后他们觉得我找不到其他offer。之前接了团子的offer,hr打电话问我还去不去,表示不去可能秋招会被拉黑,看了团子暑期实习转正率接...
投递阿里巴巴等公司10个岗位 >
点赞
评论
收藏
转发
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
因为找实习和女朋友分手了
8516
2
...
开摆了,写小说去了
6340
3
...
【有奖活动】浅聊一下我的实习⭐
5935
4
...
双非本 腾讯WXG暑期已offer | 附面经
5530
5
...
没offer的我们也很优秀偶
5366
6
...
华为暑期开奖
4520
7
...
写在最后,一个大专人9年的自述
4068
8
...
华为实习offer!终于告一段落了
3681
9
...
滴滴秋储-服务端开发 OC
3292
10
...
真有必要读研吗
3266
正在热议
#
牛客帮帮团来啦!有问必答
#
828886次浏览
13101人参与
#
机械制造薪资爆料
#
320752次浏览
3739人参与
#
晒一晒我的offer
#
3475089次浏览
55317人参与
#
金三银四,你有感觉到吗
#
330064次浏览
4229人参与
#
0offer是寒冬太冷还是我太菜
#
428975次浏览
4952人参与
#
海康威视求职进展汇总
#
102020次浏览
1218人参与
#
实习生如何通过转正
#
27161次浏览
361人参与
#
毕业租房也有小确幸
#
27285次浏览
1493人参与
#
我在牛爱网找对象
#
50629次浏览
332人参与
#
实习生应该准时下班吗
#
81050次浏览
595人参与
#
软件开发投递记录
#
479647次浏览
7248人参与
#
如果可以选,你最想从事什么工作
#
186662次浏览
3086人参与
#
春招已经启动啦 硬件uu开始投了吗?
#
87333次浏览
683人参与
#
求职遇到的搞笑事件
#
19748次浏览
287人参与
#
实习必须要去大厂吗?
#
14030次浏览
223人参与
#
荣耀求职进展汇总
#
71278次浏览
722人参与
#
你觉得找工作该拿大厂还是小厂练手
#
61921次浏览
873人参与
#
你的秋招进行到哪一步了
#
369183次浏览
6404人参与
#
你觉得通信/硬件有必要实习吗?
#
23677次浏览
428人参与
#
国企vs私企,你更想去?
#
20332次浏览
205人参与
牛客网
牛客企业服务