Java中的位运算 | AI生成和翻译
位运算利用位操作符高效解决问题。让我们探讨如何找出单一数字以及判断一个数是否为2的幂。
1. 单一数字:异或运算的妙用
在数组中所有其他数字都出现两次的情况下,使用异或运算找出唯一不重复的数字。
Java 实现
public class SingleNumber {
public static int singleNumber(int[] nums) {
int result = 0;
for (int num : nums) result ^= num;
return result;
}
public static void main(String[] args) {
int[] nums = {2, 2, 1, 1, 4};
System.out.println("单一数字: " + singleNumber(nums));
}
}
输出: 单一数字: 4
2. 2的幂次:位校验
如果一个数的二进制表示中恰好只有一个1位,则该数是2的幂。
Java 实现
public class PowerOfTwo {
public static boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
public static void main(String[] args) {
int n = 16;
System.out.println(n + " 是2的幂: " + isPowerOfTwo(n));
n = 18;
System.out.println(n + " 是2的幂: " + isPowerOfTwo(n));
}
}
输出:
16 是2的幂: true
18 是2的幂: false
跨博客总结
- 排序算法: 快速排序、归并排序和冒泡排序分别覆盖了速度、稳定性和简洁性
- 字符串处理: KMP算法、字典树和Rabin-Karp算法处理模式匹配和前缀搜索
- 搜索算法: 二分查找和线性查找提供对数级和线性级解决方案
- 图论算法: DFS、BFS、Dijkstra算法和Kruskal算法解决遍历、路径和最小生成树问题
- 位运算: 异或运算和位校验以最小操作量解决棘手问题
每个类别都有其独特优势——根据具体问题选择合适工具,并尝试这些实现!如需深入了解任何类别或需要更多算法,请随时告知。