奇偶校验算法——判断二进制数中1的个数
方法1:
时间复杂度:O(logn) n为二进制数的值
int n; int res=0; scanf("%d",&n); while(n!=0){ res+=(n&1); n>>=1; } printf("%d",res);
方法2:
时间复杂度:O(m) m为二进制数中1的个数
public class Solution { public int hammingWeight(int n) { int res=0;//初始化数量统计变量 res while(n!=0)//循环消去最右边的 1 ,当 n = 0 时跳出 { n=n&(n-1);//消去数字 n 最右边的 1 res++;// 统计变量加 1 } return res;//返回统计数量 res } }
方法3:
时间复杂度:
i = i - ((i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333); i = (i + (i >> 4)) & 0x0f0f0f0f; i = i + (i >> 8); i = i + (i >> 16); i = i & 0x3f;
第一步:求出每两位二进制数中1的个数,并替代这两位二进制数
第二步:此时每两位二进制数表示的是原本这两位二进制数中1的个数,所以将他们两两相加合并
代码如下:
i = (i & 0x33333333) + ((i >> 2) & 0x33333333); i = (i + (i >> 4)) & 0x0f0f0f0f; i = i + (i >> 8); i = i + (i >> 16);
第三部:合并完成,最终得到的就是1的个数
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现