是否可以在 O(n) 中比较数组中的所有元素?

Is a comparison of all elements in an array in O(n) possible?

我有一个长度为 n 的未排序数组。有没有办法在 O(n) 中找出数组中是否有相等的元素?

你知道你可以在 O(1)..

中读取数组
  • 创建一个空字典
  • 对于列表中的每个元素
    • 如果元素已经在字典中,return true
    • 否则将元素添加到字典
  • 如果到达列表末尾,return false

考虑一个将每个元素映射到唯一整数的函数 foo,并且该整数集的范围是从 0n

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

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

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