编码问题:Given an array of integers, every element appears twice except for one. Find that single one.
它需要a linear runtime complexity
。使用散列图查找单个整数
我的解决办法:
public class Solution {
public int singleNumber(int[] A) {
HashMap<Integer, Integer> lut = new HashMap<Integer, Integer>();
for (int i=0; i<A.length; i++){
if(lut.containsKey(A[i])){
lut.remove(A[i]);
}
else{
lut.put(A[i],1);
}
}
Set<Integer> keys = lut.keySet();
System.out.println(keys.size());
for(Integer integer: keys)
return integer;
return (Integer) null;
}
}
我觉得复杂O(n)
,因为它经过阵列只有一次,HashMap
使用固定的时间来获得的元素。但在网上判断后,它说我的代码是time limit
。有人能指出为什么这超过了时间限制吗?如何提高?
您的代码具有线性时间复杂度。 – Eran 2015-03-02 06:53:21
鉴于你只关心密钥集,我个人使用'HashSet'代码清晰。但是,是的,假设没有散列桶冲突,这应该具有线性复杂性。话虽如此,有一个简单的解决方案,使用很少的空间。 –
2015-03-02 06:55:29