现在有一个整数类型的数组,数组中素只有一个元素只出现一次,其余的元素都出现两次。
数据范围:
, 数组中每个值满足 
进阶: 空间复杂度
,时间复杂度 )
进阶: 空间复杂度
//思路:两个相同的数异或为0
//例子:1^2^3^4^4^3^2 = 2^2^3^3^4^4^1 = 1
public class Solution {
public int singleNumber(int[] A) {
int result = A[0];
for(int i=1; i<A.length; i++){
result = result ^ A[i];
}
return result;
}
}
package test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* @param lanxuewei
* 一个数组中除一个数字X外其他每个数字都出现两次,找出这个数字X
* */
public class SingleNum1 {
/**
* 遍历数组,判断当前数字是否存在于Set集合中,如果存在则删除,不存在则加入。
* 最后只剩下只出现一次的数字X,返回即可。
* 拓展:如果出现多个只出现一次的数字同样适用,不需要遍历,直接返回set即可。
* */
public int simgleNum(int[] A){
Set<Integer> set = new HashSet<Integer>();
int result = 0;
for(int i = 0; i <= A.length - 1; i++){
if(set.contains(A[i])){
set.remove(A[i]);
} else {
set.add(A[i]);
}
}
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
result = it.next();
}
return result;
}
public static void main(String[] args) {
//测试数据
int arr[] = {1,2,2,3,3,4,4,5,5};
SingleNum1 test = new SingleNum1();
System.out.println(test.simgleNum(arr));
}
}
public int singleNumber (int[] intArr) {
// write code here
if(intArr.length == 0) {
return 0;
}
if(intArr.length == 1) {
return intArr[0];
}
Arrays.parallelSort(intArr);
for(int i = 0; i < intArr.length; i++) {
if(intArr[i] != intArr[i+1]) {
return intArr[i];
}
i++;
}
return 0;
} 先排序,再两两对比
public static int singleNumber(int[] A) { int num = 0; for(int i=0;i<A.length;i++){ num^=A[i]; } return num; }