近日,人民日报发布消息,正式宣告了中美关税大战的结果,这场持续数年、举世瞩目的经济博弈,赢家已然尘埃落定。与此同时,特朗普对于接班人的指定,也为这一复...
2025-08-13 0
在面试中,位运算相关的题目总能难倒一批人。今天我们来拆解一道经典面试题:如何快速计算一个整数的二进制表示中1的个数(包括负数的补码情况)。
先看一个有趣的现象:
对于任意整数n,n-1的二进制会把n最右边的1变成0,而这个1右边的所有0都会变成1。比如:
规律:每执行一次n = n & (n-1),就会消除n中最右边的一个1。直到n变成0,执行了多少次就是有多少个1!
class Solution {public: int NumberOf1(int n) { int count = 0; while(n) { ++count; n = (n - 1) & n; } return count; }};
Python中负数用补码表示,直接运算会有问题。通过n & 0xffffffff可将负数转为32位无符号数处理:
# -*- coding:utf-8 -*-class Solution: def NumberOf1(self, n): count = 0 if n < 0: n = n & 0xffffffff # 处理负数补码 while n: count += 1 n = n & (n - 1) return count
直接遍历32位二进制的每一位:
# -*- coding:utf-8 -*-class Solution: def NumberOf1(self, n): return sum([(n >> i & 1) for i in range(32)])
相比暴力遍历32位的方法,第一种算法在1的个数较少时更高效(比如计算1000000的二进制1的个数,只需1次循环)。
这个技巧你get了吗?下次面试遇到位运算问题,不妨从「消去最右边的1」这个角度想想~
相关文章
近日,人民日报发布消息,正式宣告了中美关税大战的结果,这场持续数年、举世瞩目的经济博弈,赢家已然尘埃落定。与此同时,特朗普对于接班人的指定,也为这一复...
2025-08-13 0
IT之家 8 月 13 日消息,科技媒体 Tom's Hardware 今天(8 月 13 日)发布博文,报道称英特尔传奇架构 Itanium(IA-...
2025-08-13 0
金融界2025年8月13日消息,国家知识产权局信息显示,徐州甄图匠科技有限公司申请一项名为“一种建设施工破拆装置”的专利,公开号CN120465732...
2025-08-13 0
8月13日,据“国际先进技术应用推进中心”微信公众号消息,中国机器人及人工智能大赛人形机器人专项赛全国总决赛将于8月23日至24日在合肥启幕。本届大赛...
2025-08-13 0
您好:这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人...
2025-08-13 0
金融界2025年8月13日消息,国家知识产权局信息显示,深圳市晶导电子有限公司申请一项名为“功率器件热阻测试方法和功率器件热阻测试设备”的专利,公开号...
2025-08-13 0
金融界2025年8月13日消息,国家知识产权局信息显示,沪东重机有限公司取得一项名为“一种高度可调节升降式井架平台”的专利,授权公告号CN223213...
2025-08-13 0
金融界2025年8月13日消息,国家知识产权局信息显示,深圳奥菲诺科技有限公司申请一项名为“一种激光雕刻机系统定位和位置反馈的控制方法及系统”的专利,...
2025-08-13 0
发表评论