我想询问是否有一个算法可以在长度为n
的数组中找到,如果有一个数组元素具有一定的频率百分比(10%,20%等...)线性时间。
选择排序为O(n^2)
,即使O(n)
{{1}}只能查找该数字是否重复至少n / 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)