题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static int deal(int num) {
int i=1;
while(num%2==0) {
num=num/2;
i=i+1;
}
return i;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int[] a= {4,5,2,2,3,3};
int num=0;
for(int i=0;i<a.length;i++) {
num=a[i]^num;
}
int number=deal(num);
List<Integer> set=new ArrayList<>();
List<Integer> set1=new ArrayList<>();
for(int i=0;i<a.length;i++) {
String s= Integer.toBinaryString(a[i]);
if(s.charAt(s.length()-number)=='0')
{
set.add(a[i]);
}
else {
set1.add(a[i]);
}
}
int num1=0;
for(Integer n:set) {
num1=num1^n;
}
System.out.println(num1);
int num2=0;
for(Integer m:set1) {
num2=num2^m;
}
System.out.println(num2);
}
}