我在网上遇到了以下的面试问题,并提出了O(N ^ 2)解决方案 我想知道是否有更好的方法来解决这个问题?
问题:无序列表中的哪些数字可以表示为列表中其他3个数字的总和?
我的O(N ^ 2)解决方案:
创建一个存储所有2个元素对的总和的散列图 例如hashmap.insert(a [i] + a [j]),0< = i,j< = N-1
在步骤1中构建hashmap(需要O(N ^ 2)时间,
我将从nC2对中挑选一对,看看这对是否包含
第三个要素和总和
即,对于所有两个元素对(a [p],a [q]),其中0 <= p,q <= N-1
查找hashmap是否包含(a [q] - a [p])
答案 0 :(得分:4)
不能比O(N^2)
做得更好,因为如果你那么你就可以解决计算机科学中最难解决的问题之一就是解决小于O(N ^ 2)的三和问题。关于3和是否可以求解小于O(N ^ 2)仍然是一个悬而未决的问题。