了解排序解决方案,从3个链接列表中的每一个中查找三元组,其中总和等于给定数字

时间:2014-06-10 05:55:49

标签: algorithm

问题:

  

给定三个链接列表,例如abc,从每个列表中找到一个节点,使得节点值的总和等于给定数量。

     

例如,如果三个链接列表为12->6->2923->5->890->20->59,并且给定的数字为101,则输出应为三元组{{1 }}

GeeksforGeeks上描述"6 5 90"解决方案:(转述)

  

O(n²)b分别使用合并排序按升序和降序排序。然后,对于每对cbc的第一个元素和b的第一个元素形成一对,依此类推),我们检查{的所有值{1}}。

我不知道实现,只是算法。该算法如何提供正确的解决方案?

1 个答案:

答案 0 :(得分:1)

该算法基本上将3-SUM问题转换为2和问题。

您有列表b按升序排序,c按降序排序。

  1. 对于a中的每个ai元素,你必须检查b&中是否有一对(bj,ck)。 c这样:

    bj + ck = SUM - ai

  2. 这可以通过遍历列表b& c同时。

    为列表b&保留一个指针。 c(比如p& q)。

    If (*p + *q == SUM - ai)
       return with success.
    If (*p + *q < SUM - ai)
       p = p->next
    If (*p + *q > SUM - ai)
       q = q->next
    

    这个想法是p指向列表b中的最低元素,q指向c中的最高元素。因此,如果总和太小,则需要考虑b中的较大数字,如果它太大,则需要考虑c中较小的数字。