题目要求
1.有一个数组,只有一个数字出现两次,其他都出现两次,找出这个数字!(使用Java)
题目解析
解这个题目的时候我们要考虑使用什么方法来求出这个数!
这里我使用的是按位异或(^):如果两个相应的二进制位值不同则为1,否则为0。
先创建一个数组 int[] arr ={1,2,3,1,2}
零^任何数=这个数的本身
00000 | 00000 |
^ | ^ |
00001 | 00010 |
00001 | 00010 |
由此我们看得出一个规律两个相同的数按位异或(^)等于0
00001 | 00010 |
^ | ^ |
00001 | 00010 |
00000 | 00000 |
这样我们已经找到规律了,就可以开始写代码了!
public static void main(String[] args) {
int[] arr = {1,2,3,1,2}; //创建数组
int sum = 0; //接收最后找出的那个数
for(int i = 0;i<5;i++){ //因为数组的下表是从0开始的,所以i初始化为0。
sum = sum^arr[i]; //一个一个接着按位异或,相同数为零最后就只剩下出现一次的那个数
}
System.out.println(sum); //打印出这个数
}
最后打印出来的就是出现一次的那个数3!
有什么问题欢迎大家一起在评论区讨论