为了得到更快的执行速度,当查询某个元素多于遍历时可使用HashMap,HashMap的查询是根据哈希算法直接确定元素位置,不用和每一个元素作对比;当遍历某个元素多于查询时,可以使用数组直接读取数据元素,减少了计算元素地址的时间。以下为例子:
此题,用查询的方法比用遍历的方法代码更简洁也更快,此段代码在计算8个数的时候耗时1ms,如果纯使用数组计算的话耗时436ms。HashMap.contatinsKey(value)直接命中的时间复杂度为O(1),最坏的时间复杂度为O(n){遍历红黑树},所以计算此查询最好的时间复杂度为O(n),使用数组遍历时间复杂度为O(N^2/2)。
public class int[] addOfTwo(int [] a,int target) {
HashMap<Integer,Integer> data = new HashMap<Integer,Integer>(a.length);
for(int i=0;i<a.length;i++) {
if(data.containsKey(target-a[i]) {
return new int[2] {target-a[i],a[i]};
}
data.put(a[i],i);
}
return new int[2];
}