检索汇总到列表中目标的所有数字对

时间:2017-03-02 18:37:31

标签: java python algorithm list

假设我有一个列表[1,2,3,4,4]和一个目标5。我需要找到列表中总和为5的所有对,即(1,4),(1,4),(2,3)。有人可以建议我一个算法如何在不到O(n^2)的时间内解决它。 我在准备面试的过程中提出了这个问题,但我无法在O(n^2)以内解决问题。    感谢任何帮助

1 个答案:

答案 0 :(得分:0)

好吧,让我展示想法,你实现吧,好吗?

第一阶段。创建一个字典(地图),其中key = numbervalue = number's occurrencies。例如。对于[1, 2, 3, 4, 4],我们应该

 {1, 1}, // we have exactly one 1
 {2, 1}, //               - / - 2
 {3, 1}, //               - / - 3
 {4, 2}  //         we have two 4's

您可以在线性时间 O(N)中创建这样的词典。

第二阶段。扫描数组,查看item的每个key = 5 - item字典并重复 (item, 5 - item)value次。例如。对于[1,2,3,4,4],我们会有

 item | key | value | output
 -----------------------------------
    1 |   4 |     2 | (1, 4), (1, 4)
    2 |   3 |     1 | (2, 3)
    3 |   2 |     1 | (3, 2)
    4 |   1 |     1 | (4, 1)
    4 |   1 |     1 | (4, 1)

如您所见,第二阶段也是O(N)