Java 位运算算法题目练习

好,这一块非常适合刷算法 + 面试装硬核 😄
我给你一套 由浅入深的 Java 位运算算法练习清单每题都配思路 + 关键位运算点,不啰嗦但管用。


Java 位运算算法题目练习(从入门到进阶)

目标
一看到题目,就能条件反射想到「位运算能不能干」


一、位运算基础热身(必刷)

1️⃣ 判断奇偶

题目:判断一个整数是奇数还是偶数

boolean isOdd(int n) {
    return (n & 1) == 1;
}

📌 原理:最低位为 1 → 奇数


2️⃣ 交换两个数(不使用第三个变量)

void swap(int a, int b) {
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

⚠ 面试点:

  • a、b 指向同一变量会出错

3️⃣ 判断是否是 2 的幂

boolean isPowerOfTwo(int n) {
    return n > 0 && (n & (n - 1)) == 0;
}

二、位运算经典算法题(高频)

4️⃣ 统计二进制中 1 的个数

题目:Hamming Weight

int countOnes(int n) {
    int count = 0;
    while (n != 0) {
        n &= (n - 1);
        count++;
    }
    return count;
}

📌 技巧:

n & (n - 1) 每次消掉最右边的 1


5️⃣ 找出数组中只出现一次的数字(其余出现两次)

int singleNumber(int[] nums) {
    int res = 0;
    for (int n : nums) {
        res ^= n;
    }
    return res;
}

📌 核心:

  • 相同的数 XOR = 0
  • 0 XOR x = x

6️⃣ 找出两个只出现一次的数字

int[] singleNumberTwo(int[] nums) {
    int xor = 0;
    for (int n : nums) xor ^= n;

    int lowbit = xor & (-xor);

    int a = 0, b = 0;
    for (int n : nums) {
        if ((n & lowbit) == 0) a ^= n;
        else b ^= n;
    }
    return new int[]{a, b};
}

📌 面试杀点:

  • lowbit = x & (-x)

三、位运算 + 数学技巧

7️⃣ 加法(不使用 + -)

int add(int a, int b) {
    while (b != 0) {
        int carry = (a & b) << 1;
        a = a ^ b;
        b = carry;
    }
    return a;
}

📌 理解:

  • ^:无进位加法
  • & << 1:进位

8️⃣ 取绝对值(不使用 if)

int abs(int x) {
    int mask = x >> 31;
    return (x ^ mask) - mask;
}

四、位运算 + 状态压缩(进阶)

9️⃣ 子集枚举

void subsets(int n) {
    for (int mask = 0; mask < (1 << n); mask++) {
        // mask 表示一个子集
    }
}

📌 应用:

  • 子集
  • 状态 DP
  • 组合问题

🔟 判断两个数是否符号相同

boolean sameSign(int a, int b) {
    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,还是 算法内功修炼

文章已创建 4050

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部