如果我想将一个对象数组转换成一个集合,我应该如何以最有效的方式做到这一点?一个集合不包含重复值,所以我想我可以使用通用的合并排序算法,它将数组拆分为 2 个序列,然后从那一点开始使用比较器对数组进行排序,并消除任何重复值应该是一个元素从序列 A 等于序列 B。这将给我 O(nlogn)。这是正确的方法还是有更准确/更有效的方法来解决这个问题?
最佳答案
您基本上有两种选择。使用基于散列的解决方案,它可以为您提供 O(n)
平均情况性能 - 以 O(n)
额外空间为代价,或者使用 O(nlogn)
的排序解决方案,只需很少的额外空间即可完成。
请注意,您无法比它更好,因为这将使您能够解决 element distinctness problem 1 比建议的方法更好 - 这被认为是不可能的。
(1)通过简单地创建集合并检查它的大小是否等于数组的大小——当且仅当它是时,每个元素都是不同的
关于arrays - 将对象数组转换为集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21411446/