arrays - 将对象数组转换为集合

标签 arrays algorithm sorting

如果我想将一个对象数组转换成一个集合,我应该如何以最有效的方式做到这一点?一个集合不包含重复值,所以我想我可以使用通用的合并排序算法,它将数组拆分为 2 个序列,然后从那一点开始使用比较器对数组进行排序,并消除任何重复值应该是一个元素从序列 A 等于序列 B。这将给我 O(nlogn)。这是正确的方法还是有更准确/更有效的方法来解决这个问题?

最佳答案

您基本上有两种选择。使用基于散列的解决方案,它可以为您提供 O(n) 平均情况性能 - 以 O(n) 额外空间为代价,或者使用 O(nlogn)排序解决方案,只需很少的额外空间即可完成。

请注意,您无法比它更好,因为这将使您能够解决 element distinctness problem 1 比建议的方法更好 - 这被认为是不可能的。


(1)通过简单地创建集合并检查它的大小是否等于数组的大小——当且仅当它是时,每个元素都是不同的

关于arrays - 将对象数组转换为集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21411446/

相关文章:

arrays - 为正 n 和负 n 创建从 0 到 n 的数字数组

arrays - 在 O(n) 时间和 O(1) 额外空间内找到最大重复数

寻找可能利润的算法

python - 自守程序的长时间运行

jquery - 如何使用 JQuery DataTables 根据每个单元格中值的子字符串对列进行排序

java - 如何对 ArrayList Java 进行排序

Python:沿特定维度查找大于阈值的最大数组索引

java - 为什么这个 while 循环不会中断?

遍历图像像素的算法

C++ - 时间执行 0 与 Chrono 库