如果有办法解决 O(n) 中的元素唯一性问题



在这样的问题上有什么帮助吗??



你是这个意思吗?

def check_elements(arr):
return len(arr) == len(set(arr))

UPD我想我明白了。给定一个长度恒定的列表(例如 50(。我们需要将这种情况添加到解决问题中,以解决这个问题需要O(n(时间。我想不喜欢 O(n( 虚拟操作,而是有点合理的 O(n(。

井。。。看到我们可以在哪里得到O(n(的唯一方法是元素本身。假设我们有这样的东西:

[
1.1111111111111111..<O(n) digits>..1,
1.1111111111111111..<O(n) digits>..2,
1.1111111111111111..<O(n) digits>..3,
1.1111111111111111..<O(n) digits>..1,
]

基本上我们可以将元素视为非常长的字符串。要检查常数的 n 个字符的字符串是否唯一,我们至少必须读取它们。而且至少是O(n(时间。

你可以只使用计数排序,在你的例子中,它将在 O(n( 中。创建一个从 0 到 N 的数组(N 是最大值(,然后如果原始数组中有值 v,则在结果数组的第 value 条目中添加 1。这将带您 O(n((只需查看原始数组中的所有值(,然后只需在结果数组中搜索是否有大于 1 的条目...

最新更新