《力扣面试150题》题单拓展——位运算
《力扣面试150题》题单拓展——位运算
1.基础知识
| 运算 | 符号 | 解读 |
|---|---|---|
| 并集 | | | ans = ans |4; (1000 ∪ 0010) = 1010 |
| 交集 | & | 按位求交集 |
| 移位 | <<左移 | 1<<1 = 10(2进制) int m = l+((r-l)>>1); 二分法常用 |
count = num>>i & 1; //右移i位,并和1与,得到的是i位上面是否是1
int len = 32-__builtin_clz(s); //二进制的长度
//a ^ b = new_ans -> b = a ^ new_ans
//反转,可以用异或的方式 0 ^ 1 = 1, 1 ^ 1 = 0
2.判断某位是否1
统计每位上面1的个数,模3,按所统计的位并集起来
先统计位数,然后n>>i &1 就可以了
先统计,再移位放回
3.&
n 和 n+1 与后,某一位开始的后面都会被置为0,只有前面的公共前缀会被保留下来,找到即可
4.按位遍历运算
两数之和的异或版本,叠加了 ^ |
2935.找出强数对的最大异或值II 难度分:2349
同上,不过多了附加条件
5.递归
779.第K个语法符号 难度分:1571
用到了异或反转
本文来自博客园,作者:小柴cyl,转载请注明原文链接:https://www.cnblogs.com/cyl018/p/17868537.html

浙公网安备 33010602011771号