memory位运算
位运算题型:怎么识别、怎么讲、怎么练
位运算真正有价值的场景,是题目本身就在二进制状态层面:开关、子集、奇偶、掩码、压缩转移。关键不是炫技,而是判断它是否真的让模型更简单。
覆盖题量
30+
推荐起手
先决定每一位表示成员、奇偶,还是状态标记。
高频误区
只有位技巧,没有模型支撑。
什么时候该想到这个模式
题目显式在讲子集、掩码、奇偶或二进制状态。
n 很小,暗示可以用状态压缩枚举子集。
XOR、AND、bit count 可以替代更重的结构。
下手前的检查清单
先决定每一位表示成员、奇偶,还是状态标记。
写代码前最好手算一个 mask 样例。
注意不同语言里的符号位和移位行为。
宁可用能解释清楚的位操作,也别硬背魔法表达式。
真正适合面试表达的解题步骤
1
先定义每一位的语义。
2
选一个最自然的位操作来更新该语义。
3
如果 n 足够小,就用 mask 压缩状态。
4
先手推一两个例子验证。
5
最终代码必须还能用自然语言解释清楚。
常见变体
唯一数逻辑
用 XOR 抵消重复项并保留目标值。
状态压缩枚举
用 bit 表示一个子集或配置。
位压 DP / 转移
当维度较小时,用 mask 做 DP 状态。
模板预览
Python公开预览
x & (x - 1) # clear lowest set bit
x & -x # isolate lowest set bit
x | (1 << i) # set bit i
x & ~(1 << i) # clear bit i
x ^ (1 << i) # toggle bit i
(x >> i) & 1 # read bit i
更像真实刷题路径的推荐题单
这组题不是随机罗列,而是按“先建立识别感,再补关键变体,最后上强度”去排,适合真的拿来做一轮 pattern 复习。
高频坑点
warning
只有位技巧,没有模型支撑。
warning
混合表达式里忘了运算优先级。
warning
固定宽度整数语言里忽略符号位问题。
warning
明明数组或 set 更简单,却非要位运算。
练习顺序建议
1
先做 single number 和 counting bits。
2
再刷不用加号求和和子集枚举。
3
然后补简单的位压 DP。
4
最后再做更复杂的状态压缩题。