二进制求1的个数

来源:互联网 发布:淘宝颜色分类怎么设置 编辑:程序博客网 时间:2024/05/03 18:29

第一种解法


int num=0;

int v=255;

while(v!=0)

{

num=num+(v&ox01);

v>>=1;

复杂度为O(logV)

}

//位操作


第二种解法

while(v!=0)

{

  v=v&(v-1);

 num++;

//复杂度降低到O(M)

}

第三种空间换时间


把你所要的数所有情况1的个数全部列出来,该数的下标就是1的个数,典型的空间置换时间,如果频繁使用时,这是一个不错的方法


正整数 a和b二进制有多少位是不同的

static int count(int v)
{
int num=0;


while(v!=0)
{
v=v&(v-1);
num++;

}
return num;
}
public static void main(String[] args) {
int v=2;
int s=1;
int c=v&s;//得到的结果C中的1的位表明了A和B中相同的位都是1的位;
int d=v|s;// 得到的结果D中的1的位表明了A和B在该位至少有一个为1的位,包含了A 与 B 都是1的位数,
int e=c^d;//E 中为1的位表明了A 和 B不同的位。
System.out.println(count(e));
}


总结

当某个函数被大量使用时,看看是否该函数有什么规律

通过增加其空间复杂度来获得更快的执行效率




0 0