时间O(n)内部元素内部元素的频率算法

时间:2014-07-22 07:44:07

标签: arrays algorithm

我想询问是否有一个算法可以在长度为n的数组中找到,如果有一个数组元素具有一定的频率百分比(10%,20%等...)线性时间。

选择排序为O(n^2),即使O(n) {{1}}只能查找该数字是否重复至少n / 2次,多数算法。

2 个答案:

答案 0 :(得分:1)

假设你没有空间限制,那么你要做到这一点要比实际更难。

这个想法是迭代数组并保存每个元素的计数。字典(或等效结构)查找是O(1)所以这不是问题 然后只需迭代字典,看看哪些元素具有所需的频率。

Python伪代码:

for elem in array:
    count[elem] = count.get(elem, 0) + 1
for elem, elem_count in count.items():
    if 0.20 <= float(elem_count) / len(array) <= 0.25:
        print "{} has a frequency between 20% and 25%".format(elem)

答案 1 :(得分:0)

int counter = 0; (不影响此代码行中的运行时间) 使用循环迭代arry(for,while,无论如何)。对于每个元素:
   - if(element == what_you_search)
    计数器++;

//如果每次迭代中的if语句都是o(1),那么就会有n次交互,所以在整体中它是
// o(n)表示整个循环。
int percentage = counter /(array.len()); //它是在o(1)中完成的。

o(1)+ o(n)+ o(1)= o(n)