摘要:位运算符技巧和解题思路
一、找重复出现的数 (变体是找出落单数)
描述:一个数组中只有一个数出现了2次,求这个数是什么?
解法1: 使用异或运算
A^0 = A ; A^A = 0;
我们只需要把要消掉的数变成双个进行异或运算
解法2: 桶排序
public static void main(String[] args) {
int N =11 ;
//初始化数组
int [] arr = new int[N];
for (int i = 0 ; i < arr.length-1 ; i++ ){
arr[i] = i+1;
}
//产生随机数
arr[arr.length-1] = new Random().nextInt(N-1)+1;
System.out.println("随机重复数:"+arr[arr.length-1]);
for (int i = 0 ; i < arr.length ;i++ ){
System.out.print(arr[i]+" ");
}
int x = 0;
for (int i = 1 ; i < N ;i++ ){
x = x^i;
}
for (int j = 0 ; j<N ; j++){
x = x^arr[j];
}
System.out.println("重复数为:"+x);
}
二、找二进制1的个数
考察与运算
解法1. 1& 32位的二进制整数,计数 N&(1<<i) == (1<<I) ?此位为1可计数 : 不是继续循环
解法2. (N-1)&N ==0 ? 结束循环 : 计数
三、进制转换
求整数x 转成 K 进制的字符串
Integer.toString( x , k)