2和问题,列表版本的“加法”

时间:2018-11-07 17:17:54

标签: algorithm

我正在处理的问题是这样的:

我有一个列表列表和一个目标列表。我想看看任何两个列表的合并在元素(及其计数)方面是否等同于目标列表。

我目前的操作方式是遍历O(n^2),在这里我合并所有可能的列表对,然后将它们的元素频率图与目标的元素频率图进行比较。

但是,这个问题让我想起了2-sum问题,我们应该在数组中找到两个元素相加成一个特定的目标元素。这个问题可以在O(n)时间内解决,但是我不确定如何将这种方法转化为我的原始问题。

就规范而言,我可以构建列表列表,但是从某种意义上说,我希望可以保留每个列表的哈希值,而不是列表本身。

是否存在一些哈希技巧或2-sum问题的一种变体,可以使我的方法相对于原始问题更快?

1 个答案:

答案 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

}