我被问到一个问题,我们正在寻找重复的社会安全号码,就像阵列A和阵列B中的ssn一样。我的想法是迭代每个存储每个数量的数组。在HashMap中的ssn。当然,所有计数超过1的键都是重复的。我的理解是这将是一个O(n + m)操作,其中m和n是每个数组中元素的数量。我被告知这是非常低效的#34;关于时间复杂性,时间复杂度实际上是O(n * m)。这怎么回事?
答案 0 :(得分:1)
首先,O(n+m)
比O(n*m)
快。当你有两个这样的循环时,O(n*m)
的时间复杂度就是这样的:
for x in [1..n]
for y in [1..m]
因此,“效率非常低”一词根本不适用,除非O(n+m)
引起额外空间的紧缩。在这种情况下,您可以阐明最重要的因素时间复杂度或空间复杂度。