我在一次采访中被要求给出一个O(n)算法来打印一个在数组中出现超过n / 2次的元素,如果有这样的元素的话。 n是数组的大小。 我对如何做到这一点没有任何线索。有人可以帮忙吗?
答案 0 :(得分:15)
答案 1 :(得分:0)
在伪代码中:
int n = array.length
Hash<elementType,int> hash
foreach element in array
hash[element] += 1
foreach entry in hash
if entry.value > n/2
print entry.key
break
答案 2 :(得分:0)
它也是中值,使用median-of-medians algorithm获取O(n)。在C ++中,您可以在一行中执行此操作:
std::nth_element(begin, begin + n/2, begin + n)