涉及在两个输入数组上循环的解决方案:O(n + m)或O(n * m)

时间:2017-02-05 22:10:08

标签: java time-complexity

我被问到一个问题,我们正在寻找重复的社会安全号码,就像阵列A和阵列B中的ssn一样。我的想法是迭代每个存储每个数量的数组。在HashMap中的ssn。当然,所有计数超过1的键都是重复的。我的理解是这将是一个O(n + m)操作,其中m和n是每个数组中元素的数量。我被告知这是非常低效的#34;关于时间复杂性,时间复杂度实际上是O(n * m)。这怎么回事?

1 个答案:

答案 0 :(得分:1)

首先,O(n+m)O(n*m)快。当你有两个这样的循环时,O(n*m)的时间复杂度就是这样的:

for x in [1..n]
   for y in [1..m]

因此,“效率非常低”一词根本不适用,除非O(n+m)引起额外空间的紧缩。在这种情况下,您可以阐明最重要的因素时间复杂度空间复杂度