【发布时间】:2026-01-06 07:50:01
【问题描述】:
我正在寻找一种更快的方法来查找元素数组是否仅包含不同的元素。最糟糕的做法是获取每个元素并将其与数组中的每个其他元素进行比较。下一个最好的方法是对列表进行排序,然后进行比较,但这仍然没有太大改善。有没有其他方法可以做到这一点?
【问题讨论】:
-
取决于语言及其内置类。但我认为你能做的最好的就是 O(N) 时间。
-
你的数组中有哪些元素?如果它们是数字,您可以使用数组和设置/测试位来查看之前是否已经设置了相同的数字。
-
有趣的事实:如果您知道元素的数量大于元素的范围,那么您就知道发生了碰撞。
-
排序并没有提高多少?让我们来看看。将每个元素与其他元素进行比较是 O(n^2),排序然后比较是 O(n log n)。当 n==1 百万时,您会发现排序和比较速度快得多。
-
最坏的情况不是 O(n^2 log n) 明显优于 O(n^2) 吗?因为元素是本地化的,所以您只需遍历排序数组一次即可将前一个元素的值与当前元素的值进行比较。如果它们相同,则您没有不同的元素。