位运算高频题

共 20 题
#

1. 只出现一次的数字(LeetCode 136)中异或的三条性质如何保证成对元素抵消,为什么不需要额外空间?

A 需哈希表 O(n) 空间
B 异或无自反性
C 异或的自反性 a⊕a=0 使成对元素抵消,单次元素保留,O(1) 空间 ✓ 正确答案
D 异或结果不确定
#

2. 位 1 的个数(LeetCode 191)中 n & (n-1) 循环清零最低位与查表法、内置 popcount 的取舍?

A 无法用查表
B n&(n-1) 每次清零最高位
C 复杂度固定为 O(位数)
D n&(n-1) 每次清零最低位 1,循环次数等于 1 的个数 ✓ 正确答案
#

3. 比特位计数(LeetCode 338)中 dp[i]=dp[i>>1]+(i&1) 的递推如何 O(n) 求出所有结果?

A dp[i]=dp[i>>1]+(i&1),因 i 与 i>>1 差最低位,O(n) 递推 ✓ 正确答案
B dp[i]=dp[i>>1]+1
C 每数 O(log n) 计算
D 无法递推
#

4. 两数之和不用加号(371)中异或得无进位和、与左移得进位,递归终止条件如何设计

A 无需处理进位
B 与右移得进位
C 异或得进位
D 异或得无进位和、与左移得进位,carry 为 0 时终止 ✓ 正确答案
#

5. 只出现一次的数字 II(LeetCode 137)中按位统计 1 的个数并对 3 取模能找出单次元素,如何推广到出现 k 次?

A 按位统计 1 的个数 mod 3,出现 3 次的贡献归零,单次保留;推广到 k 次用 mod k ✓ 正确答案
B 出现 3 次的贡献 mod 3 为 1
C 无法按位统计
D 只能处理出现 2 次
#

6. 只出现一次的数字 III(LeetCode 260)中如何用“最低不同位”把两个单次元素分到两组异或?

A 各组异或得不到单次元素
B 分组依据是最高位
C 无需找不同位
D 用 a^b 的最低不同位分组,两个单次元素分到不同组后各组异或 ✓ 正确答案
#

7. 颠倒二进制位(LeetCode 190)中逐位取出逆序拼接的实现与复杂度?

A 无法处理负数
B 用有符号右移
C 复杂度 O(log n)
D 逐位取最低位拼到结果,循环 32 次 O(32),用 >>> 处理符号 ✓ 正确答案
#

8. 缺失数字(LeetCode 268)中异或法与高斯求和法的原理与溢出风险对比?

A 异或法会溢出
B 高斯求和法无溢出
C 异或法无溢出,高斯求和法 n(n+1)/2 可能溢出 int ✓ 正确答案
D 两种方法都需 long
#

9. 2 的幂(LeetCode 231)中 n>0 且 n&(n-1)==0 的判定,扩展到 4 的幂(342)如何加掩码?

A 2 的幂:n>0 且 n&(n-1)==0;4 的幂再加奇数位掩码 0x55555555 ✓ 正确答案
B 2 的幂用 n&(n+1)==0
C 4 的幂无需掩码
D 4 的幂是 2 的幂且 1 在偶数位
#

10. 汉明距离(LeetCode 461)中异或后统计 1 的个数,与内置 Integer.bitCount 的实现差异?

A 异或得相同位
B 异或得不同位,统计 1 个数;bitCount 用分治/硬件指令 O(1),手写循环 O(1 个数) ✓ 正确答案
C bitCount 需遍历所有位
D 手写循环固定 O(32)
#

11. 数字范围按位与(LeetCode 201)中结果是公共前缀部分,如何用右移找公共前缀?

A 后缀位保留
B 结果 = left 本身
C 结果 = 公共前缀,后缀进位变化被清零,用同时右移找公共前缀 ✓ 正确答案
D 无需右移
#

12. 最大单词长度乘积(LeetCode 318)中如何用 int 位掩码表示字母集合,预计算后 O(n²) 判交集?

A 掩码相与为 1 表示无公共字母
B 用 int 位掩码表示字母集合,无公共字母即掩码相与为 0 ✓ 正确答案
C 需 O(26) 比较
D 无法用位掩码
#

13. 二进制求和(LeetCode 67)中模拟逐位加法时进位如何传递,与“大数加法”模板的关系?

A 进位是 sum%2
B 逐位相加+进位,结果位 sum%2、进位 sum/2,是大数加法模板的 2 进制特例 ✓ 正确答案
C 结果位是 sum/2
D 与大数加法无关
#

14. 最大异或对(421)中 01-Trie 逐位贪心与哈希前缀法如何达到 O(n log A),为什么贪心最优

A 贪心从低位开始
B 01-Trie 逐位贪心取相反位,高位优先,O(n log A) ✓ 正确答案
C 复杂度 O(n)
D 低位比高位优先
#

15. UTF-8 验证(393)中按首字节前缀位数判断后续字节个数,非法序列的边界分类

A 首字节 10 开头合法
B 后续字节无前缀要求
C 首字节前缀位数决定序列长度,后续字节必须以 10 开头,分类检查非法 ✓ 正确答案
D 无需检查长度
#

16. 格雷编码(LeetCode 89)中 G(n)=i^(i>>1) 的构造为什么保证相邻码只差一位?

A 相邻码差两位
B G(n)=i^(i<<1)
C G(n)=i^(i>>1),相邻 i 的进位只影响一位格雷码位,故只差一位 ✓ 正确答案
D 构造与进位无关
#

17. 子集(LeetCode 78)位枚举中 mask 从 0 到 2^n-1 枚举子集的顺序与回溯法的对比?

A 与回溯顺序相同
B mask 从 1 到 2^n
C 位枚举支持剪枝
D mask 从 0 到 2^n-1 枚举,按数值递增顺序,与回溯树形顺序不同 ✓ 正确答案
#

18. 二进制手表(LeetCode 401)中枚举小时与分钟的组合,如何统计亮灯数?

A 无需统计亮灯
B 小时范围 0-24
C 枚举小时 0-11、分钟 0-59,统计 popcount 亮灯数匹配 ✓ 正确答案
D 分钟范围 0-100
#

19. 数字转换为十六进制(LeetCode 405)中负数用补码如何逐 4 位转换?

A 每 4 位取 num&0xF,用 >>> 无符号右移处理负数补码 ✓ 正确答案
B 用 >> 右移
C 负数先转正数
D 无需无符号右移
#

20. 两数相除(29)中如何用倍增减法(二进制长除)在 32 位范围内实现,溢出边界如何处理

A MIN/-1 商为 MIN
B 无需处理溢出
C 用乘法
D 除数翻倍逼近的二进制长除,MIN/-1 返回 MAX,用 long 防溢出 ✓ 正确答案