用异或的方法,灰常简单
public class Solution {
public int singleNumber(int[] A) {
int i = 0, j =0;
for(; i < A.length; i++ ) j = j ^ A[i];
return j;
}
}
下面这个是错误的代码,用hashtable做,时间是2n,超时。
import java.util.Hashtable;
public class Solution {
public int singleNumber(int[] A) {
//最理想的方案:就是用Hashtable存值
//存值时同一个值遇到第二遍时,就将其删掉。最后Hashtable中剩下一个值,将其输出。
Hashtable<Integer, Integer> numberfilter = new Hashtable<Integer, Integer>();
int i;
for(i = 0; i < A.length ; i++)
{
if(numberfilter.contains(A[i])) numberfilter.remove(A[i]);
else numberfilter.put(A[i], A[i]);//numberfilter.put(A[i])错误
//Removes the key (and its corresponding value) from this hashtable.
}
for(i = 0; i < A.length ; i++)
{
if(numberfilter.contains(A[i])) break;
}
return A[i];
}
}