好,这一块非常适合刷算法 + 面试装硬核😄
我给你一套由浅入深的 Java 位运算算法练习清单,每题都配思路 + 关键位运算点,不啰嗦但管用。
Java 位运算算法题目练习(从入门到进阶)
目标:
一看到题目,就能条件反射想到「位运算能不能干」
一、位运算基础热身(必刷)
1️⃣ 判断奇偶
题目:判断一个整数是奇数还是偶数
booleanisOdd(intn){return(n&1)==1;}📌 原理:最低位为 1 → 奇数
2️⃣ 交换两个数(不使用第三个变量)
voidswap(inta,intb){a=a^b;b=a^b;a=a^b;}⚠ 面试点:
- a、b 指向同一变量会出错
3️⃣判断是否是 2 的幂
booleanisPowerOfTwo(intn){returnn>0&&(n&(n-1))==0;}二、位运算经典算法题(高频)
4️⃣ 统计二进制中 1 的个数
题目:Hamming Weight
intcountOnes(intn){intcount=0;while(n!=0){n&=(n-1);count++;}returncount;}📌 技巧:
n & (n - 1)每次消掉最右边的 1
5️⃣ 找出数组中只出现一次的数字(其余出现两次)
intsingleNumber(int[]nums){intres=0;for(intn:nums){res^=n;}returnres;}📌 核心:
- 相同的数 XOR = 0
- 0 XOR x = x
6️⃣ 找出两个只出现一次的数字
int[]singleNumberTwo(int[]nums){intxor=0;for(intn:nums)xor^=n;intlowbit=xor&(-xor);inta=0,b=0;for(intn:nums){if((n&lowbit)==0)a^=n;elseb^=n;}returnnewint[]{a,b};}📌 面试杀点:
lowbit = x & (-x)
三、位运算 + 数学技巧
7️⃣ 加法(不使用 + -)
intadd(inta,intb){while(b!=0){intcarry=(a&b)<<1;a=a^b;b=carry;}returna;}📌 理解:
^:无进位加法& << 1:进位
8️⃣ 取绝对值(不使用 if)
intabs(intx){intmask=x>>31;return(x^mask)-mask;}四、位运算 + 状态压缩(进阶)
9️⃣ 子集枚举
voidsubsets(intn){for(intmask=0;mask<(1<<n);mask++){// mask 表示一个子集}}📌 应用:
- 子集
- 状态 DP
- 组合问题
🔟 判断两个数是否符号相同
booleansameSign(inta,intb){return(a^b)>=0;}五、位运算面试必背 7 大技巧
1️⃣n & (n - 1)消除最低位 1
2️⃣n & (-n)提取最低位 1
3️⃣x ^ x = 0
4️⃣x ^ 0 = x
5️⃣ 左移相当于乘 2
6️⃣ 右移相当于除 2
7️⃣ 位运算常用于状态压缩
六、刷题路线建议(收藏)
奇偶 / 2 的幂 ↓ 统计 1 ↓ 异或找单数 ↓ 不使用运算符 ↓ 状态压缩 / 位 DP七、一句话终极总结
位运算 = 用二进制思考问题
如果你愿意,我可以下一步帮你:
- 🔥LeetCode 位运算题 Top 20 精讲
- 🧠位运算在动态规划中的高级用法
- 🧪位运算面试“反套路”题目合集
- 📄一页纸位运算公式速查表
你是偏刷题拿 offer,还是算法内功修炼?