2016-11-30 58 views

回答

0

考虑一个功能foo每个元素映射到一个唯一的整数,而整数集从0一定到n

然后,您可以声明大小为n的布尔类型的数组arr

然后遍历您的元素数组,每个元素调用foo以产生索引i。您检查arr[i]以查看它是否已设置为true。如果它有,那么你没有一套独特的元素。如果arr没有该元素,则设置arr[i] = true

这是O(N),但在存储方面很昂贵。

+0

我不认为在O(n)中创建数组是可能的,是吗? –

+0

这是对OS的调用,肯定不会比O(n)更差。 *初始化*它是O(n)。 – Bathsheba

1
  • 创建一个空的字典
  • 列表中的
    • 每一个元素,如果该元素已经在字典,返回true
    • 其他元素添加到字典
  • 如果达到列表的末尾,返回false
+0

我认为这是因为插入到字典中不是O(1)。你只是在复杂的道路上踢球。 – Bathsheba

+0

为什么不呢? https://wiki.python.org/moin/TimeComplexity#dict –

+0

Tbh我从来没有听说过字典的数据结构。但通过字典运行并检查所有与我正在比较的元素相同的元素不能在log(n)下完成,可以吗?所以我仍然需要n * log(n)。 –

相关问题