【问题标题】:Retrieving all the pairs of numbers that sum to a target in a list [closed]检索列表中总和为目标的所有数字对[关闭]
【发布时间】:2017-03-02 18:37:30
【问题描述】:

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

【问题讨论】:

  • 你需要先展示你的尝试解决这个问题。
  • 了解更多关于 Hash Map 的信息,然后尝试一下。
  • 我尝试将一个元素与所有元素进行比较
  • 不要对您的代码进行简洁和模糊的描述,而是将其显示出来。

标签: java python algorithm list


【解决方案1】:

好吧,让我展示这个想法,然后你会实现它,好吗?

第一阶段。创建一个字典(地图),其中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)

【讨论】:

    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多