【发布时间】:2015-03-02 06:47:58
【问题描述】:
一个编码问题: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。有人能指出为什么这超过了时间限制吗?如何改进?
【问题讨论】:
-
您的代码具有线性时间复杂度。
-
鉴于您只关心密钥集,我个人会使用
HashSet<Integer>以使代码清晰。但是,是的,假设没有哈希桶冲突,这应该具有线性复杂性。话虽如此,有一个简单的解决方案,占用空间非常小。