贴两种方法,一种是用HashMap,另一种用bit manipulation, 但是我觉得第二种方法是因为题意不严密,{2,2,4,4,4,4} 4也不是出现了两次,但是你用第二种方法就根本得不到答案的。test case没有测试这种情况,说明默认不是出现了两次的那个数只出现了一次。
public int singleNumber(int[] A) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < A.length; i++){
if(!map.containsKey(A[i])) {
map.put(A[i], i);
}
else {
map.remove(A[i]);
}
}
for (int i = 0; i < A.length; i++){
if(map.containsKey(A[i])) {return A[i];}
}
return 0;
}
public int singleNumber(int[] A) {
if(A.length == 1) return A[0];
int i = 0;
while(i < A.length-1) {A[i+1] = A[i]^A[i+1];i++;} // 建议另外用一个retsult来存储结果,这样不会改变A数组,记住Java是传引进来,而没有另外建一个copy
return A[A.length-1];
}