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

时间:2016-07-18 20:12:28

标签: time-complexity

您将获得一个N个整数数组。系统会要求您找到在数组中出现偶数次数的最大元素。算法的时间复杂度是多少?你可以不对整个数组进行排序吗?

1 个答案:

答案 0 :(得分:1)

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

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

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