我正在处理的问题是这样的:
我有一个列表列表和一个目标列表。我想看看任何两个列表的合并在元素(及其计数)方面是否等同于目标列表。
我目前的操作方式是遍历O(n^2)
,在这里我合并所有可能的列表对,然后将它们的元素频率图与目标的元素频率图进行比较。
但是,这个问题让我想起了2-sum
问题,我们应该在数组中找到两个元素相加成一个特定的目标元素。这个问题可以在O(n)
时间内解决,但是我不确定如何将这种方法转化为我的原始问题。
就规范而言,我可以构建列表列表,但是从某种意义上说,我希望可以保留每个列表的哈希值,而不是列表本身。
是否存在一些哈希技巧或2-sum
问题的一种变体,可以使我的方法相对于原始问题更快?
答案 0 :(得分:1)
实际上,您可以使用2-sum
技术和哈希来更有效地解决此问题。步骤如下:
Sort the elements of each list // Here, purpose of the sort is to overcome different odering of element in the list
Sort the elements target list
listHashMap to keep the list
for each list L {
If target list contains L {
M = target list - L // M contains remaining element of target list
sort this M
if listHashMap contains M {
L,M is your answer
}
}
insert L in your listHashMap
}