查找数组中显示超过N / K次的所有元素,N是数组大小,k是数字

时间:2016-08-27 18:06:02

标签: java algorithm

每个最佳算法都是这个

1)创建一个大小(k-1)的临时数组来存储元素及其计数(输出元素将在这些k-1元素中)。以下是临时数组元素的结构。

2)遍历输入数组并更新每个遍历元素的temp [](添加/删除元素或增加/减少计数)。数组temp []在每一步都存储潜在的(k-1)候选者。此步骤需要O(nk)时间。

3)迭代最终(k-1)个潜在候选者(存储在temp []中)。或每个元素,检查它是否实际计数超过n / k。此步骤需要O(nk)时间。

我提到的资源是: -

1)http://www.geeksforgeeks.org/given-an-array-of-of-size-n-finds-all-the-elements-that-appear-more-than-nk-times/

2)http://algorithms.tutorialhorizon.com/find-all-elements-in-an-array-which-appears-more-than-nk-times-n-is-array-size-and-k-is-a-number/

**对我来说,更好的算法如下所示,即O(n)**

1)开始迭代数组。

2)对于每个元素,检查哈希映射中是否存在元素。如果是,则增加计数器,否则将其添加到计数器1

3)在添加每个元素之后,检查计数是否大于n / k次。如果是打印

这里的存储器复杂度将是O(N),这比O(K-1)差,但是时间复杂度要好得多,这是O(n)与之前算法中的O(nk)相比。

考虑到时间复杂性和简单性/可读性或答案是Depends on取决于我们想要妥协的地方,即在 时间或记忆?

0 个答案:

没有答案