lowbit运算 O(nlogn)
返回最低位的
1
1
1
原理
计算机中一个数的负数就是这个数的补码(取反
+
1
+1
+1)
比如原码为:
10001000
10001000
10001000
则反码为:
011101111
011101111
011101111
补码为:
011110000
011110000
011110000
原码与补码按位异或就可以得到最低位的
1
1
1
即
1000
1000
1000
int lowbit(int x) { return x & -x; }
枚举 O(nlogn)
对于每个数字a,a&1得到了该数字的最后一位,之后将a右移一位,直到位0,就得到了1的个数
例题:https://www.acwing.com/problem/content/803/
例题:https://www.acwing.com/problem/content/97/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)