Time complexity 给定一个由N个整数组成的数组,如何找到在数组中出现偶数次且时间复杂度最小的最大元素

Time complexity 给定一个由N个整数组成的数组,如何找到在数组中出现偶数次且时间复杂度最小的最大元素,time-complexity,Time Complexity,您将得到一个由N个整数组成的数组。要求您查找在数组中出现偶数次的最大元素。你的算法的时间复杂度是多少?您可以在不对整个数组排序的情况下执行此操作吗?您可以在O(n log n)中使用表查找方法执行此操作。对于列表中的每个元素,请在表中查找。如果缺少,则插入一个键值对,键值为元素,值为外观数(从1开始);如果存在,则增加外观。最后,只需在O(n)中循环表,并查找具有偶数值的最大键 理论上,对于理想的哈希表,查找操作是O(1)。因此,您可以在O(n)时间内查找和/或插入所有n元素,使总复杂性O(n)

您将得到一个由N个整数组成的数组。要求您查找在数组中出现偶数次的最大元素。你的算法的时间复杂度是多少?您可以在不对整个数组排序的情况下执行此操作吗?

您可以在
O(n log n)
中使用表查找方法执行此操作。对于列表中的每个元素,请在表中查找。如果缺少,则插入一个键值对,键值为元素,值为外观数(从1开始);如果存在,则增加外观。最后,只需在O(n)中循环表,并查找具有偶数值的最大键

理论上,对于理想的哈希表,查找操作是O(1)。因此,您可以在O(n)时间内查找和/或插入所有
n
元素,使总复杂性O(n)。然而,在实践中,您将在空间分配(需要比数据集大小多得多的空间)和冲突(为什么需要)方面遇到困难。这使得O(1)查找很难实现;在最坏的情况下,它可能高达O(n)(尽管也不太可能)-使总复杂性为O(n^2)


相反,使用基于树的表可以更安全—也就是说,密钥存储在二叉树中。在这种情况下,只要树是平衡的,查找和插入操作都是O(logn);有多种树结构可以帮助确保这一点,例如红黑树、AVL、splay、B树等(谷歌是你的朋友)。这将使总复杂性成为一个保证的O(n log n)

最好说哈希表实现的预期运行时间是O(n),最坏情况下的运行时间是O(n^2),以澄清它在实践中极有可能很快,虽然它有一个不太可能但很糟糕的最坏情况。@templatetypedef是的。另外值得注意的是,如果范围足够小,则每个值{notfound,偶数,奇数}只需要1.58位,就可以在保证的O(n)中执行。那是。。。每字节5个值,不丢失。@MooingDuck#I♥mathI不认为八字树有保证的O(logn),我认为它们是最坏的O(n)。我从来没有听说过梁树,我在谷歌上也找不到任何东西。