【发布时间】:2015-08-23 01:13:51
【问题描述】:
我在考试中得到了这个问题:
给定一个整数数组,使用 O(N) 时间复杂度和 O(1) 空间复杂度找到数组中不重复的第一个数字。
我想不出任何解决方案。我知道我可以遍历数组并维护一个linkedhashmap,它将存储数组元素和它出现的次数,然后最后我必须搜索hashmap来找到那个数字。空间复杂度大于 O(1) 但我想不出其他解决方案。
我也仔细阅读了问题,说数组的最大大小为 100 万。我认为如果我们可以创建一个自定义哈希图,它将使用 100 万大小的固定大小的数组,那么这可以在 O(1) 空间复杂度中实现,因为在这种情况下所需的存储将是恒定的,但不确定我是否正确。请让我知道是否有其他解决方案。
【问题讨论】:
-
也许它指的是不重复的连续数字,在这种情况下,您只需将一个数字与前一个数字进行比较?这似乎微不足道,但这只是一个快速的想法。
-
我不认为仅仅因为你使用了一个固定大小的Collection,就意味着空间复杂度是1...
-
@AbishekManoharan 修复大小集合的空间复杂度为 1
-
@nafas 不,如果集合大小为 N,那么显然它不是 O(1) 大小的复杂度,而是 O(N)。
-
请发布确切的问题陈述。有时他们试图欺骗你,这比你想象的要简单。