位运算
找出落单的数
入门的第二道题,也同样还是“位运算”的题,有了第一道的经验,这一道做的比较轻松一点,但是学习的路还很长。
题目:找出落单的数
描述:一个数组里除了某一个数字之列,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。
结题思路:异或解法
1、利用 A^0 = A, A^A^B^C^C = 0^B^0 = B
2、去除重复的数字
3、结果即为我们要的数
public class 找出落单的数 {
public static void main(String[] args) {
//构建满足题目的数组
int N = 31;
int[] arr = new int[N];
Random random = new Random();
//假设这个小组中的数字的值均在1~100
arr[0] = random.nextInt(100) + 1;
for (int i = 1; i < arr.length - 1; i += 2) {
arr[i] = random.nextInt(100) + 1;
arr[i + 1] = arr[i];
}
System.out.println(Arrays.toString(arr));
System.out.println("=====================");
//异或解法:
//1、利用 A^0 = A, A^A^B^C^C = 0^B^0 = B
//2、去除重复的数字
//3、结果即为我们要的数
int num = 0;
for (int i = 0; i < arr.length; i++) {
num = (num ^ arr[i]);
}
System.out.println("落单的数字是:" + num);
}
}
调试结果:
如有错误,敬请指正!