题目:
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例1:
![](https://i-blog.csdnimg.cn/blog_migrate/c27ed4161ef1d9a9e75432c0c456a59d.png)
示例2:
![](https://i-blog.csdnimg.cn/blog_migrate/f86bea9caf132f0638a6f42dc0f42633.png)
示例3:
![](https://i-blog.csdnimg.cn/blog_migrate/1d3389b7551b252928c77e0c13e59e1f.png)
异或运算的特点:
1.任何数和0做异或运算,结果还是原来那个数字,即a^0=a
2.任何数和本身做异或运算,结果为0,即a^a=0
3.异或运算满足交换律和结合律
思路1:
因为本题中的元素只有出现一次和两次的情况,所以我们用异或运算,来判断数字是出现一次还是两次。在singleNumber()方法中,定义一个int类型变量singleNumber=0,然后遍历数组,依次和singleNumber进行异或运算,最后返回singleNumber即可。
如果两个数相同,异或结果为0;
如果两个数不同,异或结果为1;
比如
输入[1,2,2],singleNumber初始化为0
singleNumber为0,和1进行异或运算结果为1;
singleNumber为1,和2进行异或运算结果为3;
singleNumber为3,和2进行异或运算结果为1;
package Lq_算法练习;
import java.util.Scanner;
public class Demo_只出现一次的数字 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String[] strArray = str.split(",");
//键盘输入数组,数字之间用","隔开
int[] nums = new int[strArray.length];
for(int i=0;i<nums.length;i++) {
nums[i]=Integer.parseInt(strArray[i]);
//将strArray[i]转换成整型类型,并赋值给nums[i]
}
int result = singleNumber(nums);
System.out.println("只出现一次的数字为:"+result);
}
public static int singleNumber(int[] nums) {
int singleNumber = 0;
//增强型for循环,for(类型 变量:数组),最后输出的是num
/*
相当于
for(int i=0;i<arr.length;i++){
int num = arr[i];
...
}
*/
for (int num : nums) {
singleNumber ^= num;//异或运算,转化为二进制再进行运算
System.out.println("num="+num);
System.out.println(singleNumber);
}
return singleNumber;
}
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/cef6443c133a2259654bcaf61381ac0b.png)
思路2:
直接在main方法中输入数组,再将数组传入singleNumber()方法中,得出只出现一次的数字,最后输出。
package Lq_算法练习;
import java.util.Scanner;
public class Demo_只出现一次的数字 {
public static void main(String[] args) {
int[] array = { 1, 2, 2 };
System.out.println("只出现一次的数字为:"+singleNumber(array));
}
public static int singleNumber(int[] array) {
int tmp = 0; // array[0];
//使用简单的for循环
for (int i = 0; i < array.length; i++) {// for (int i = 1; i < array.length; i++) {//少一次^
tmp = tmp ^ array[i];
}
return tmp;
}
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/317e9a5c0838320f30afd3ae3b0bb729.png)